2016-05-30 3 views
0

Ich versuche dynamisch Elemente in einer Liste zu erstellen, wobei jedes Element in der Liste tatsächlich eine Liste von Werten ist. Um das Problem zu isolieren, wird i=3 hier verwendet, aber i kann wirklich jede beliebige Zahl oder irgendein Zeichen/String sein.Wie "eval" in R zu verwenden, um Variablennamen in einer Liste zuzuweisen?

i=3 
varname = paste("x", as.character(i), sep="") 
X=list() 
var = rnorm(10, 100, 5) 
new_list=list(eval(varname)=var) 

Die obige Abbildung zeigt den Fehler Zurückverfolgungs:

3: var = rnorm(10, 100, 5) 
4: new_list=list(eval(varname)= 

Aber jetzt diese Besuche:

# but "eval(varname)" is a character 
print(eval(varname)) 

[1] "x3"

# and this works: 
new_list=list("x3"=var) 

... Also, warum funktioniert die Linie new_list=list(eval(varname)=var) nicht?

Antwort

0

Es ist einfacher, die Elemente zu benennen mit setNames

new_list <- setNames(list(var), varname) 
+0

Dies funktioniert. Aber warum versucht ich diese Arbeit nicht? Bitte helfen Sie mir, die Nuancen von R etwas tiefer zu verstehen. – Hunle

+0

Der Grund, warum Ihr Code nicht funktioniert, ist, weil 'eval (varname)' nicht ausgewertet wird. Es ist auf der linken Seite des Gleichheitszeichens innerhalb eines Anrufs. Es ist eine besondere Position, die einen einfachen Namen erfordert. Verwenden Sie den Vorschlag von akrun. –

Verwandte Themen