Sagen wir, ich
dflist <- list(data.frame(a=1:3), data.frame(b=10:12, a=4:6))
eine Liste von data.frames haben, wenn ich die erste Spalte von jedem Element in der Liste extrahieren will, kann ich
lapply(dflist, `[[`, 1)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 10 11 12
tun
Warum kann ich nicht verwenden, um die „$“ funktionieren auf die gleiche Art und Weise
lapply(dflist, `$`, "a")
# [[1]]
# NULL
#
# [[2]]
# NULL
Aber diese beiden Arbeiten:
lapply(dflist, function(x) x$a)
`$`(dflist[[1]], "a")
Mir ist klar, dass in diesem Fall ein
lapply(dflist, `[[`, "a")
aber ich arbeitete mit einem S4-Objekt verwenden können, die nicht die Indizierung über [[
zu ermöglichen schien. Zum Beispiel
library(adegenet)
data(nancycats)
catpop <- genind2genpop(nancycats)
mylist <- list(catpop, catpop)
#works
catpop[[1]]$tab
#doesn't work
lapply(mylist, "$", "tab")
# Error in slot(x, name) :
# no slot of name "..." for this object of class "genpop"
#doesn't work
lapply(mylist, "[[", "tab")
# Error in FUN(X[[1L]], ...) : this S4 class is not subsettable
Dieses funktioniert 'lapply (dflist, Funktion (x) "$"(x, "a")) zu verwenden, '. – Tim
Schöne Frage. Fyi, die Antwort ist irgendwie auffindbar mit 'Methoden (" $ ", dflist [[1]])' – Frank
Nun @ Frank, es ist nicht, dass ich nicht bewusst war, dass '$ .data.frame 'existierte, bin ich nur überrascht Das Problem wurde durch das Versenden von Methoden verursacht. Ich kann mir nicht viele andere Fälle vorstellen, in denen Sie explizit eine Form einer generischen Funktion aufrufen müssen. – MrFlick