Wie nennt man Variablen im laufenden Betrieb?

Ist es möglich, neue Variablennamen im laufenden Betrieb zu erstellen?

Ich möchte Datenrahmen aus einer Liste in neue Variablen mit Zahlen am Ende lesen. Etwas wie orca1, orca2, orca3 …

Wenn ich sowas versuche

paste("orca",i,sep="")=list_name[[i]] 

Ich bekomme diesen Fehler

 target of assignment expands to non-language object 

Gibt es einen anderen Weg?

    Benutze assign :

     assign(paste("orca", i, sep = ""), list_name[[i]]) 

    Es scheint mir, dass du mit einer Liste besser orca1 orca2 als mit orca1 , orca2 , etc., dann wäre es orca[1] , orca[2] , …

    Normalerweise erstellen Sie eine Liste von Variablen, die nur durch eine Zahl voneinander unterschieden werden, da diese Nummer eine bequeme Möglichkeit ist, später darauf zuzugreifen.

     orca < - list() orca[1] <- "Hi" orca[2] <- 59 

    Ansonsten ist die assign genau das, was Sie wollen.

    Erstellen Sie keine Datenrahmen. Bewahren Sie die Liste auf, benennen Sie ihre Elemente, aber hängen Sie sie nicht an.

    Der Hauptgrund dafür ist, dass Sie, wenn Sie Variablen unterwegs erstellen, fast immer später durch jede von ihnen iterieren müssen, um etwas Nützliches zu tun. Dort werden Sie erneut gezwungen sein, alle Namen, die Sie im laufenden Betrieb erstellt haben, zu durchlaufen.

    Es ist viel einfacher, die Elemente der Liste zu benennen und durch die Namen zu iterieren.

    Was Anhang betrifft, ist es wirklich schlecht Programmierpraxis in R und kann zu einer Menge Ärger führen, wenn Sie nicht vorsichtig sind.

    Eine andere knifflige Lösung besteht darin, Elemente der Liste zu benennen und sie attach :

     list_name = list( head(iris), head(swiss), head(airquality) ) names(list_name) < - paste("orca", seq_along(list_name), sep="") attach(list_name) orca1 # Sepal.Length Sepal.Width Petal.Length Petal.Width Species # 1 5.1 3.5 1.4 0.2 setosa # 2 4.9 3.0 1.4 0.2 setosa # 3 4.7 3.2 1.3 0.2 setosa # 4 4.6 3.1 1.5 0.2 setosa # 5 5.0 3.6 1.4 0.2 setosa # 6 5.4 3.9 1.7 0.4 setosa 

    FAQ sagt:

    Wenn Sie haben

     varname < - c("a", "b", "d") 

    du kannst tun

     get(varname[1]) + 2 

    zum

     a + 2 

    oder

     assign(varname[1], 2 + 2) 

    zum

     a < - 2 + 2 

    Es sieht also so aus, als ob Sie GET verwenden, wenn Sie eine Formel auswerten möchten, die eine Variable (z. B. eine Verkettung) verwendet, und ASSIGN, wenn Sie einer vordefinierten Variablen einen Wert zuweisen möchten.

    Syntax für assign: assign (x, value)

    x: Ein Variablenname, der als Zeichenfolge angegeben wird. Es wird kein Zwang ausgeübt und das erste Element eines Zeichenvektors mit einer Länge von mehr als eins wird mit einer Warnung verwendet.

    Wert: Wert, der x zugewiesen werden soll.

    Und diese Option?

     list_name< -list() for(i in 1:100){ paste("orca",i,sep="")->list_name[[i]] } 

    Es funktioniert perfekt. In dem Beispiel, das Sie eingeben, fehlt die erste Zeile und gibt Ihnen die Fehlermeldung.