Verwendung von get () mit Ersatzfunktionen

8

Kann mir jemand erklären, warum das folgende Beispiel auftritt?

%Vor%

Ich würde A) möchte wissen, warum die Ersetzungsfunktionen auf diese Weise nicht mit get() funktionieren?

Und b) wenn es einen Weg gibt, um dies zu umgehen, angesichts meines Problems, das ich unten skizziere;

Mein Problem ist, dass ich viele Objekte in einem Loop habe (mit einem Spielzeug-Beispiel), etwa so: assign( paste( "Object" , i , sep = "." ) , rnorm(1000 , i) ) , wo i ein Vektor ist, sagen wir i <- 1:1000 und dann wäre ich gerne Sie können jedem Objekt in der Schleife Namen zuweisen (z. B. aus einem anderen Vektor), aber names( get( paste( "Object" , i , sep = "." ) ) <- someNewName funktioniert nicht wie im obigen Beispiel.

Aber get( paste( "Object" , i , sep = "." ) ) gibt die Namen (oder NULL ) dieser Objekte zurück.

Danke!

    
Simon O'Hanlon 22.01.2013, 17:25
quelle

2 Antworten

14

Um zu verstehen, warum das nicht funktioniert, müssen Sie verstehen, was colnames<- tut. Wie jede Funktion in diesem Objekt sieht es so aus, als ob es ein Objekt verändert, es modifiziert tatsächlich eine Kopie, so dass konzeptionell colnames(x) <- y auf Folgendes erweitert wird:

%Vor%

, das etwas kompakter geschrieben werden kann, wenn Sie den Ersatzoperator wie üblich aufrufen:

%Vor%

So wird Ihr Beispiel

%Vor%

Die rechte Seite ist ein gültiges R, aber der Befehl als Ganzes nicht, weil Sie dem Ergebnis einer Funktion nicht etwas zuweisen können:

%Vor%     
hadley 22.01.2013, 19:16
quelle
7

Die Verwendung von assign in der Art, wie Sie in der Frage demonstrieren, ist in R zumindest selten. Normalerweise würden Sie einfach alle Objekte in eine Liste einfügen.

Also statt

%Vor%

würdest du

machen %Vor%

Tatsächlich ist dieses Konstrukt so gebräuchlich, dass es eine (optimierte) Funktion ( lapply ) gibt, die etwas Ähnliches macht:

%Vor%

Sie können dann z. B. auf das erste Objekt als objects[[1]] zugreifen und es gibt verschiedene Funktionen zum Arbeiten mit Listen.

    
Roland 22.01.2013 17:45
quelle

Tags und Links