Ich habe mehrere Datenrahmen mit einigen Spalten mit den gleichen Namen. Ich versuche einen Weg zu finden, das Format der gleichnamigen Spalten aus verschiedenen Datenrahmen systematisch zu ändern. Hier ist, was ich habe kommen mit:Wie kann ich das Format von Spalten aus mehreren Datenrahmen konvertieren?
data1=data.frame(a=seq(1:10),b=c("a","b"))
data2=data.frame(a=seq(11:20),b=c("c","d"))
temp = c("data1$a","data2$a")
for (i in 1:length(temp)) {
eval(parse(text=(temp)[i])) = as.character(eval(parse(text=(temp)[i])))
}
Nachdem der Code ausgeführt wird, habe ich die folgende Nachricht erhalten:
Error in file(filename, "r") : cannot open the connection
In addition: Warning message:
In file(filename, "r") :
cannot open file 'data1$a': No such file or directory
Allerdings, wenn ich den folgenden Code ausführen, funktioniert es:
as.character(eval(parse(text=(temp)[1])))
Kann jemand bitte helfen, meinen Code zu korrigieren und zu erklären, warum es nicht funktioniert?
Auch bezüglich des Fehlers, den Sie mit Ihrem parse/eval-Versuch bekommen, weiß ich nicht genau, was passiert, aber es scheint mit dem '* tmp *' Artefakt von R's Umsetzung komplexer lvalues verwandt zu sein, dh Lvalues, die aus indizierten Objekten oder Funktionsaufrufen bestehen. Ich weiß nicht genug über die R-Interna, um genauer zu sein, aber diese Implementations-Verrücktheit sah immer wie ein Hack für mich aus, und dieser Fehler, den Sie bekommen, sieht wie ein obskurer Fehler im Hack aus. Siehe https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Subset-assignment für einige Informationen über '* tmp *'. – bgoldst
Wenn Sie 'traceback()' sofort nach dem Auftreten des Fehlers ausführen, können Sie sehen, dass '* tmp *' etwas faul macht. Es wird schließlich als unbenanntes Argument an 'parse()' übergeben, das als Dateiname interpretiert wird, der dann nicht geöffnet werden kann. – bgoldst