Hier ist mein Code:
x<-c(1,2)
x
names(x)<- c("bob","ed")
x$ed
Warum erhalte ich den folgenden Fehler?
Fehler in x $ ed: $ Operator ist für Atomvektoren ungültig
In der Hilfedatei zu $
(Siehe ?"$"
) können Sie lesen:
$ ist nur für rekursive Objekte gültig und wird nur im folgenden Abschnitt über rekursive Objekte erläutert.
Lassen Sie uns nun prüfen, ob x
es rekursiv ist
> is.recursive(x)
[1] FALSE
Ein rekursives Objekt hat eine listenartige Struktur. Ein Vektor ist nicht rekursiv, sondern ein atomares Objekt
> is.atomic(x)
[1] TRUE
Daher wird beim Anwenden $
auf einen Vektor (nicht rekursives Objekt) eine Fehlermeldung angezeigt. Verwenden Sie [
stattdessen:
> x["ed"]
ed
2
Sie können auch verwenden getElement
> getElement(x, "ed")
[1] 2
Error in object$y : $ operator is invalid for atomic vectors
gestoßen, dass ich versucht habe, Ihre Antwort / Ihren Vorschlag durchzuarbeiten, und mein Problem nicht gelöst habe. Vielleicht verstehe ich Ihre erste Antwort nicht. Könnten Sie bitte versuchen, Ihre Antwort anhand eines vollständigeren Beispiels neu zu formulieren?Der Grund, warum Sie diesen Fehler erhalten, ist, dass Sie eine haben
vector
.Wenn Sie den
$
Operator verwenden möchten , müssen Sie ihn lediglich in a konvertierendata.frame
. Da Sie in diesem speziellen Fall jedoch nur eine Zeile haben, müssen Sie diese auch transponieren. sonstbob
unded
Ihre Zeilennamen statt Spaltennamen werden , was ist das, was ich glaube , Sie wollen.x <- c(1, 2) x names(x) <- c("bob", "ed") x <- as.data.frame(t(x)) x$ed [1] 2
quelle
x <- as.list(x)
.Weil
$
funktioniert nicht auf Atomvektoren. Verwenden Sie[
oder[[
stattdessen. Aus der Hilfedatei für$
:x[["ed"]]
wird funktionieren.quelle
Hier ist x ein Vektor. Sie müssen es in einen Datenrahmen konvertieren, um den Operator $ verwenden zu können.
wird für dich arbeiten.
x<-c(1,2) names(x)<- c("bob","ed") x <- as.data.frame(x)
gibt Ihnen die Ausgabe von x als:
bob 1
ed 2
Und gibt Ihnen die Ausgabe von x $ ed als:
NULL
Wenn Sie bob und ed als Spaltennamen möchten, müssen Sie den Datenrahmen wie folgt transponieren, damit
x <- as.data.frame(t(x))
Ihr Code wirdx<-c(1,2) x names(x)<- c("bob","ed") x$ed x <- as.data.frame(t(x))
Die Ausgabe von x $ ed lautet nun:
[1] 2
quelle
Sie erhalten diesen Fehler, obwohl alles in Einklang steht, aufgrund eines Konflikts, der durch eines der Pakete verursacht wird, die derzeit in Ihrer R-Umgebung geladen sind.
Um dieses Problem zu beheben, trennen Sie alle nicht benötigten Pakete von der R-Umgebung. Wenn ich zum Beispiel das gleiche Problem hatte, habe ich Folgendes getan:
detach(package:neuralnet)
Fazit: Trennen Sie alle Bibliotheken, die für die Ausführung nicht mehr benötigt werden ... und das Problem wird gelöst.
quelle
Atomic Sammlungen sind zugänglich durch
$
Rekursive Sammlungen gibt es nicht. Vielmehr
[[ ]]
wird das verwendetBrowse[1]> is.atomic(list()) [1] FALSE Browse[1]> is.atomic(data.frame()) [1] FALSE Browse[1]> is.atomic(class(list(foo="bar"))) [1] TRUE Browse[1]> is.atomic(c(" lang ")) [1] TRUE
R kann manchmal lustig sein
a = list(1,2,3) b = data.frame(a) d = rbind("?",c(b)) e = exp(1) f = list(d) print(data.frame(c(list(f,e)))) X1 X2 X3 X2.71828182845905 1 ? ? ? 2.718282 2 1 2 3 2.718282
quelle