Ich versuche, eine Eigenart mit der subset()
Funktion in R und die Verwendung der $
-Operator zu verstehen. Ich werde den CO2
-Datensatz in R als Beispiel:
I
sub <- subset(CO2, CO2$Type=="Quebec")
ohne Fehler ausführen kann auf dem gleichen Datensatz zu gelangen, als wäre ich
sub <- subset(CO2, Type=="Quebec")
jedoch laufen, Ich habe festgestellt, dass dies nicht immer der Fall ist.
Manchmal einschließlich der $
innerhalb subset()
Funktion wird den folgenden Fehler
$ operator is invalid for atomic vectors
produzieren, was den ‚$ Operator ist ungültig für das Atom Vektoren‘ auslöst Fehler? Warum ist es in einigen Fällen zulässig ($
) (wie im obigen CO2-Beispiel), aber nicht in anderen? (Ich bin besonders frustriert, wenn ich in meinem eigenen Daten durch read.csv()
bringen und manchmal bekomme ich die Fehlermeldung, wenn sie mit $
der Teilmenge versucht, und ich manchmal nicht ohne erkennbares Muster)
Dank!
Pro Kommentaren, ich versuche, reproduzierbare Beispiele zu veröffentlichen. Hier
ist die Situation, die den Fehler auslöst:
Moose<-structure(list(Moose = 1:25, Tagging_Loc = structure(c(1L, 1L,
2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
Gender = structure(c(2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
2L), .Label = c("F", "M"), class = "factor"), Age = c(20L,
23L, 14L, 15L, 10L, 9L, 5L, 10L, 19L, 22L, 21L, 21L, 7L,
16L, 19L, 9L, 23L, 5L, 9L, 10L, 16L, 8L, 13L, 14L, 6L), Weight = c(1366L,
1006L, 888L, 1359L, 899L, 635L, 400L, 1000L, 1012L, 1480L,
1001L, 1100L, 482L, 1414L, 971L, 725L, 1400L, 416L, 790L,
970L, 921L, 560L, 1103L, 904L, 669L), Distance = c(250.5,
410.239, 457.6402591, 245.8523, 430.9975, 308.8673107, 212.5212497,
414.2093545, 439.6581, 215.6491489, 464.2384, 425.4256828,
233.5635555, 207.98, 453.7098751, 390.0506365, 235.5212497,
207.368, 427.5084899, 443.0452824, 459.8999274, 274.6856592,
350.5661674, 456.9600032, 330.146)), .Names = c("Moose",
"Tagging_Loc", "Gender", "Age", "Weight", "Distance"), class = "data.frame", row.names = c(NA,
-25L))
sub_Moose<-subset(Moose, Moose$Tagging_Loc=="A")
sub_Moose<-subset(Moose, Tagging_Loc=="A")'
Aber wenn ich nur den Namen des Datensatzes ändern, beide Versionen von subset()
Lauf in Ordnung - kein Fehler:
mOose<-structure(list(Moose = 1:25, Tagging_Loc = structure(c(1L, 1L,
2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
Gender = structure(c(2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
2L), .Label = c("F", "M"), class = "factor"), Age = c(20L,
23L, 14L, 15L, 10L, 9L, 5L, 10L, 19L, 22L, 21L, 21L, 7L,
16L, 19L, 9L, 23L, 5L, 9L, 10L, 16L, 8L, 13L, 14L, 6L), Weight = c(1366L,
1006L, 888L, 1359L, 899L, 635L, 400L, 1000L, 1012L, 1480L,
1001L, 1100L, 482L, 1414L, 971L, 725L, 1400L, 416L, 790L,
970L, 921L, 560L, 1103L, 904L, 669L), Distance = c(250.5,
410.239, 457.6402591, 245.8523, 430.9975, 308.8673107, 212.5212497,
414.2093545, 439.6581, 215.6491489, 464.2384, 425.4256828,
233.5635555, 207.98, 453.7098751, 390.0506365, 235.5212497,
207.368, 427.5084899, 443.0452824, 459.8999274, 274.6856592,
350.5661674, 456.9600032, 330.146)), .Names = c("Moose",
"Tagging_Loc", "Gender", "Age", "Weight", "Distance"), class = "data.frame", row.names = c(NA,
-25L))
sub_Moose<-subset(mOose, mOose$Tagging_Loc=="A")
sub_Moose<-subset(mOose, Tagging_Loc=="A")
Könnten Sie bitte ein reproduzierbares Beispiel geben? – kaksat
Der Hauptgrund, warum Sie 'subset()' verwenden, ist, dass Sie '$' nicht verwenden müssen. Sie sollten ** nicht ** verwenden, wenn die Variable von Interesse aus dem data.frame des ersten Parameters kommt. Sie erhalten wahrscheinlich einen Fehler, wenn eine Spalte denselben Namen wie data.frame hat. Aber es könnte auch aus anderen Gründen passieren. Sie sollten wirklich ein [reproduzierbares Beispiel] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) zur Verfügung stellen, wenn Sie um Hilfe bitten – MrFlick
Auch mach's gut mit der Verwendung von Subsets. Wie es unten in der Hilfedatei heißt, "? Subset", "Dies ist eine Komfortfunktion, die interaktiv verwendet werden soll. Für die Programmierung ist es besser, die Standard-Subsetting-Funktionen wie [und insbesondere die nicht-standardmäßige Auswertung von Argument-Subset kann unvorhergesehene Konsequenzen haben. " – lmo