In R möchte ich am Ende meines Skripts eine Liste globaler Variablen abrufen und diese durchlaufen. Hier ist mein Code
#declare a few sample variables
a<-10
b<-"Hello world"
c<-data.frame()
#get all global variables in script and iterate over them
myGlobals<-objects()
for(i in myGlobals){
print(typeof(i)) #prints 'character'
}
Mein Problem ist, dass typeof(i)
immer zurückgegeben wird character
, obwohl variabel a
und c
keine Zeichenvariablen sind. Wie kann ich den ursprünglichen Variablentyp in der for-Schleife abrufen?
typeof()
Gibt eine sehr allgemeine Information darüber, wie das Objekt im Speicher gespeichert ist. Für die meisten Anwendungsfälle, wenn Sie gute Informationen über eine Variable wissen möchtenx
, finden Sie weitere nützliche Informationen aus erhaltenclass(x)
,is(x)
oderstr(x)
(in der Reihenfolge, wie viel Detail sie bieten). In Erics Antwort unten finden Sie Beispiele dafür, wastypeof()
Ihnen sagt: Faktoren sindinteger
; Listen, Datenrahmen, Modellobjekte, andere erweiterte Objekte sind nurlist
...Antworten:
Sie müssen verwenden
get
, um den Wert und nicht den Zeichennamen des Objekts zu erhalten, wie vonls
:Alternativ können Sie für das dargestellte Problem Folgendes verwenden
eapply
:quelle
get
hat seine Kritiker und ich würde mir vorstellen,eapply
wäre schneller als eine interpretierte Schleife. Aber es gibt nur einen Weg, es herauszufinden ...So erhalten Sie den Variablentyp, wenn er unter einem globalen Objekt versteckt ist:
Alles, was Sie benötigen, finden Sie im R-Handbuch zu Basistypen: https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
Sie
object()
müssen eingedrungen sein,get(...)
bevor Sie hineinsehen können. Beispiel:So erhalten Sie den Variablentyp, den Sie in R haben
Die R- Funktion
typeof
hat eine Vorspannung, um Ihnen beispielsweise den Typ in maximaler Tiefe zu geben.So erhalten Sie die Klasse einer Variablen, die Sie in R haben
Die R- Funktion
class
hat eine Tendenz, Ihnen den Typ des Containers oder der Struktur zu geben, die beispielsweise Ihre Typen einkapseln.Holen Sie sich die Daten
storage.mode
Ihrer VariablenWenn eine R-Variable auf die Festplatte geschrieben wird, ändert sich das Datenlayout erneut und wird als Datenvariable bezeichnet
storage.mode
. Die Funktionstorage.mode(...)
zeigt diese Informationen auf niedriger Ebene an: siehe Modus, Klasse und Typ von R-Objekten . Sie sollten sich keine Gedanken über den Speichermodus von R machen müssen, es sei denn, Sie versuchen, Verzögerungen zu verstehen, die durch Roundtrip-Casts / Zwänge verursacht werden, die beim Zuweisen und Lesen von Daten auf und von der Festplatte auftreten.Ideologie rund um Rs Triaden-Typisierungssystem:
Rs Enten-Typisierungssystem weist Unsicherheit auf. Betrachten Sie als Analogie einen Keramikbecher, der zum Halten einer Flüssigkeit oder als Projektil wie ein Baseball verwendet werden kann. Der Zweck des Bechers hängt von seinen verfügbaren Eigenschaften und der auf ihn einwirkenden Funktion ab. Diese Fließfähigkeit des Typs ermöglicht es Programmierern, jede Art von Ausgabe von einer Funktion in eine andere Funktion umzuleiten, und R wird große Anstrengungen unternehmen, um zu versuchen, Ihre Gedanken zu lesen und etwas Vernünftiges zu tun.
Die Idee ist, dass neue Programmierer, wenn sie R-Programme über Brownsche Bewegung schreiben, wie sie wollen, versuchen, a
googah.blimflarg
in a zu übergebenvehicle.subspaceresponder(...)
. Anstatt einen Tippfehler zu kotzen, macht das R-Programm Gymnastik, um den Typ zu transformieren und dann etwas überraschend Nützliches zu tun. Der neue Programmierer veröffentlicht den Code in seinem Blog und sagt: "Sehen Sie sich diese enorme Sache an, die ich mit 3 Zeilen R-Code gemacht habe! Ich habe keine Ahnung, woher er weiß, was zu tun ist, aber er tut es!"quelle
Sie können die Klasse (x) verwenden, um den Variablentyp zu überprüfen. Wenn alle Variablentypen eines Datenrahmens überprüft werden sollen, kann sapply (x, class) verwendet werden.
quelle
Ich versuche
class
undtypeof
funktioniert, aber alles schlägt fehl.quelle
Hier ist eines meiner Toolkit-Spielzeuge, das im Wesentlichen das Gegenteil von dem ist, was Sie wollten:
quelle
lapply (your_dataframe, class) gibt Ihnen so etwas wie:
$ tikr [1] "Faktor"
$ Date [1] "Date"
$ Open [1] "numerisch"
$ High [1] "numerisch"
... etc.
quelle