我正在使用比较 lavaan 对象semTools::compareFit
。它抛出一条非常奇怪的错误消息。
我还尝试了以下可重现的示例:
data("HolzingerSwineford1939",package="lavaan")
HS.modelA <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9'
HS.modelB<- ' visual =~ x1 + x2
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9'
fit.A<- cfa(HS.modelA, data = HolzingerSwineford1939)
fit.B<- cfa(HS.modelB, data = HolzingerSwineford1939)
semTools::compareFit(fit.A,fit.B)
它返回:
getMethod("summary",signature = "FitDiff") 中的错误:找不到函数“summary”和签名 FitDiff 的方法
另外,由于代码位于函数内部,但我希望看到屏幕上打印的输出,所以我还包括:
result<-semTools::compareFit(fit.A,fit.B)
semTools::saveFile(result, file="",what="summary", tableFormat=FALSE)
这返回
长度类别模式
1 FitDiff S4
我在第一条错误消息中看到与以下内容相关的内容summary
和方法...我有一些 S3summary
方法,试图将其形式化为个人使用的包...不确定它是否相关...我是否可能搞砸了一些东西?
它发生在 RStudio 安装中的多个项目中...我的印象是它以前工作过...
我很感激任何帮助。
我在这里报告我如何规避这个问题。
这里发生的事情的结论是:
这实际上是 S3 方法扰乱 S4 方法调度的问题。
如果我加载showMethods(summary)
在加载 semTools 包之前,我得到:
Function "summary":
<not an S4 generic function>)
但如果我加载showMethods(summary)
加载后,我得到:
Function: summary (package base)
object="ANY"
object="FitDiff"
(inherited from: object="ANY")
object="lavaan"
object="lavaanList"
object="mle"
所以,解决方案:
考虑到FitDiff
对象结构,我创建了一个summary.FitDiff
(s3方法):
summary.FitDiff<-function(object){
print(object@nested)
return(object@fit)
}
和这个summary
方法与FitDiff
object:
a<-semTools::compareFit(fit.A,fit.B)
summary(a)
这不是一个完美的解决方案,理想的解决方案应该涉及如何指定 s3 方法而不弄乱所有可能的 s4 方法,但我对 s4 方法没有足够的了解...它暂时解决了我的问题...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)