2016-07-18 9 views
1

Angenommen, ein Objekt im Arbeitsbereich ist bereits definiert zu reproduzieren:automatisch Befehl erzeugt ein Objekt im Arbeitsbereich

a <- round(rnorm(10)) 

[1] 0 -1 -1 -1 -1 0 2 1 1 1 

Wie erzeuge ich programmatisch einen Befehl, die a schafft?

Zum Beispiel würde Ich mag die a in meinem Arbeitsbereich verwenden Sie die folgende Zeichenfolge codeToCreateA zu generieren:

codeToCreateA <- "a <- c(0, -1, -1, -1, -1, 0, 2, 1, 1, 1)" 

Ich interessiere mich für den allgemeinen Fall, bei dem a jede Klasse von Objekt sein könnte, einschließlich eines Vektors, einer Liste oder eines Datenrahmens.

+5

Sie meinen wie 'dput (a)'? Nicht sicher, was du mit "als String" meinst –

+0

@Bobby Ich verstehe deine Frage nicht. Möchten Sie einen "numerischen" Vektor generieren? – Learner

+0

Nur die Frage etwas aktualisiert. Ich hoffe das hilft. Ja, 'dput (a)' funktioniert in diesem Fall. Vielen Dank! Ich habe es gerade auf einem Datenrahmen ausprobiert und habe diese Ergebnisstruktur erhalten (Liste (A = c ("a", "a", "a", "b", "b"), B = 1: 5),. Namen = c ("A", "B"), Reihe.Name = c (NA, -5L), Klasse = c ("data.table", "data.frame" ), .internal.selfref = < Zeiger: 0x22f5938>) '. Wie kann ich den Datenrahmen aus diesem Code wieder erstellen? – Bobby

Antwort

1

dput(A) gibt die Struktur des Objekts A zurück. Es kann dann verwendet werden, um A direkt neu zu erstellen oder Code für das erneute Erstellen eines einzelnen Objekts mit anderen zu teilen.

Ich habe es auf einem Vektor, einem Datenrahmen und einer Liste getestet.

Hier ist ein Beispiel für ein Datentablett (auch des Klassendatenrahmen):

a <- structure(list(A = c("a", "a", "a", "b", "b"), B = 1:5), 
.Names = c("A", "B"), row.names = c(NA, -5L), 
class = c("data.table", "data.frame"), 
.internal.selfref = <pointer: 0x22f5938>) 

Beachten Sie, dass das letzte Argument vor der Ausführung dieses Codes entfernt werden muss. d.h.

b <- structure(list(A = c("a", "a", "a", "b", "b"), B = 1:5), 
.Names = c("A", "B"), row.names = c(NA, -5L), 
class = c("data.table", "data.frame")) 

Die Kommentare zu der obigen Frage halfen, diese Antwort vorzubereiten.

+0

Dies ist eine 'data.table', nicht nur eine' dat.frame'. Der normale 'dat.frame' hat kein' .internal.selfref 'Argument –

+0

Danke, das merke ich auch. Aber hatte ich recht, dass es notwendig ist, das letzte Argument zu entfernen? – Bobby

Verwandte Themen