Porównuję obiekty Lavaan za pomocą semTools::compareFit. Rzuca bardzo dziwny komunikat o błędzie.

Próbowałem również następujący powtarzalny przykład:

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)

Zwraca:

Błąd w GetMethod ("Podsumowanie", podpis = "Fitdiff"): Nie znaleziono metody dla funkcji "Podsumowanie" i podpis Fitdiff

Ponadto, ponieważ kod znajduje się w funkcji, ale chciałbym zobaczyć wydrukowane wyjście na ekranie, ja też włączony:

result<-semTools::compareFit(fit.A,fit.B)
semTools::saveFile(result, file="",what="summary", tableFormat=FALSE)

To wraca

Tryb klasy długości

  1 FitDiff      S4

Widzę wspomnienie w pierwszym komunikatu o błędzie coś związanego z summary i metodami ... Mam kilka metod S3 summary, próbując sformalizować w pakiecie do użytku osobistego ... Nie jestem pewien, czy jest Powiązane ... Czy to możliwe, że coś się zepsułem? Dzieje się to w więcej niż jednym projekcie w instalacji Rstudio ... Mam wrażenie, że działał przed ...

Doceniam każdą pomoc.

1
hamagust 24 lipiec 2020, 05:05

1 odpowiedź

Najlepsza odpowiedź

Zgłaszam tutaj, jak obejmuję problem.

Wniosek tego, co się tutaj dzieje:

Jest to naprawdę problem z metodami S3, pomieszczającą wysyłkę metody S4.

Jeśli załaduję showMethods(summary) przed załadowaniem pakietu Semtools, dostaję:

Function "summary":
 <not an S4 generic function>)

Ale jeśli załaduję showMethods(summary) po załadowaniu, dostaję:

Function: summary (package base)
object="ANY"
object="FitDiff"
    (inherited from: object="ANY")
object="lavaan"
object="lavaanList"
object="mle"

tak, rozwiązanie:

Biorąc pod uwagę strukturę obiektów FitDiff, stworzyłem metodę summary.FitDiff (S3):

summary.FitDiff<-function(object){
          print(object@nested)
          return(object@fit)
}

Metoda summary jest używana z obiektem FitDiff:

a<-semTools::compareFit(fit.A,fit.B)
summary(a)

Nie jest to idealne rozwiązanie, idealne rozwiązanie powinno wiązać się z tym, jak określić metody S3 bez pomieszania wszystkich możliwych S4Metod, ale nie mam wystarczającej wiedzy o metodach S4 ... rozwiązało mój problem na razie ...

2
hamagust 27 sierpień 2020, 21:09