getMethod("summary", signature = "FitDiff") 出错
Error in getMethod("summary", signature = "FitDiff")
我正在使用 semTools::compareFit
比较 lavaan 对象。它抛出一条非常奇怪的错误消息。
我还尝试了以下可重现的示例:
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)
它returns:
Error in getMethod("summary", signature = "FitDiff") : no method found for function 'summary' and signature FitDiff
此外,由于代码在函数内部,但我希望看到屏幕上打印的输出,我还包括:
result<-semTools::compareFit(fit.A,fit.B)
semTools::saveFile(result, file="",what="summary", tableFormat=FALSE)
这个returns
Length Class Mode
1 FitDiff S4
我在第一条错误消息中看到与 summary
和方法相关的内容...我有一些 S3 summary
方法,试图在一个包中形式化供个人使用...不确定它是否相关......我有可能搞砸了什么吗?
它发生在 RStudio 安装的多个项目中...我的印象是它以前工作过...
感谢任何帮助。
我在这里报告我是如何规避这个问题的。
这里发生的事情的结论:
这确实是 S3 方法扰乱 S4 方法分派的问题。
如果我在加载 semTools 包之前加载 showMethods(summary)
,我得到:
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
对象一起使用:
a<-semTools::compareFit(fit.A,fit.B)
summary(a)
这不是一个完美的解决方案,理想的解决方案应该涉及如何在不弄乱所有可能的 s4 方法的情况下指定 s3 方法,但我对 s4 方法的了解还不够……它暂时解决了我的问题。 ..
我正在使用 semTools::compareFit
比较 lavaan 对象。它抛出一条非常奇怪的错误消息。
我还尝试了以下可重现的示例:
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)
它returns:
Error in getMethod("summary", signature = "FitDiff") : no method found for function 'summary' and signature FitDiff
此外,由于代码在函数内部,但我希望看到屏幕上打印的输出,我还包括:
result<-semTools::compareFit(fit.A,fit.B)
semTools::saveFile(result, file="",what="summary", tableFormat=FALSE)
这个returns
Length Class Mode
1 FitDiff S4
我在第一条错误消息中看到与 summary
和方法相关的内容...我有一些 S3 summary
方法,试图在一个包中形式化供个人使用...不确定它是否相关......我有可能搞砸了什么吗?
它发生在 RStudio 安装的多个项目中...我的印象是它以前工作过...
感谢任何帮助。
我在这里报告我是如何规避这个问题的。
这里发生的事情的结论:
这确实是 S3 方法扰乱 S4 方法分派的问题。
如果我在加载 semTools 包之前加载 showMethods(summary)
,我得到:
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
对象一起使用:
a<-semTools::compareFit(fit.A,fit.B)
summary(a)
这不是一个完美的解决方案,理想的解决方案应该涉及如何在不弄乱所有可能的 s4 方法的情况下指定 s3 方法,但我对 s4 方法的了解还不够……它暂时解决了我的问题。 ..