2011-04-01 18 views
56

aşağıya bakın:R içinde "yapıştır" ile bir değişken adı oluşturun?

paste("perf.a", "1", sep="") 
    [1] "perf.a1" 

Ne perf.a1 bir değer atamak isterseniz?

Ben boşuna ile, vb as.name, as.symbol, denedik:

as.name(paste("perf.a", "1", sep="")) = 5 
Error in as.name(paste("perf.a", "1", sep = "")) = 5 : 
    target of assignment expands to non-language object 
as.symbol(paste("perf.a", "1", sep="")) = 5 
Error in as.symbol(paste("perf.a", "1", sep = "")) = 5 : 
    target of assignment expands to non-language object 
noquote(paste("perf.a", "1", sep="")) = 5 
Error in noquote(paste("perf.a", "1", sep = "")) = 5 : 
    target of assignment expands to non-language object 
+3

Yinelenen? http://stackoverflow.com/questions/2679193/how-to-name-variables-on-the-fly-in-r – Marek

+2

Ve diğerleri: http://stackoverflow.com/questions/2907896/how-to- in-a-variable-in-a-variable-in-in-r-niteliğine atamak, http://stackoverflow.com/questions/2899581/assign-subset-of-parent-table-to- in-r nesneler, http://stackoverflow.com/questions/3094111/r-turning-list-items-into-objects, http://stackoverflow.com/questions/2590043/creating-a-series-of- vektörler-a-vektör – Marek

cevap

84

Sen assign (doc) perf.a1 değerini değiştirmek için kullanabilirsiniz:

> assign(paste("perf.a", "1", sep=""),5) 
> perf.a1 
[1] 5 
+3

Niçin bu bulmak zordu! – lamecicle

+5

'atama (paste0 (" perf.a "," 1 "), 5)' biraz daha nemli –

12

?assign bakınız.

> assign(paste("tra.", 1, sep = ""), 5) 
> tra.1 
    [1] 5 
5

Benim durumumda, eval() işlevi çok iyi çalışıyor. Aşağıda 10 değişken üretiyorum ve 10 değer atadım. Benim durumumda

lhs <- rnorm(10) 
rhs <- paste("perf.a", 1:10, "<-", lhs, sep="") 
eval(parse(text=rhs)) 
1

Ben oluşturmak sembolleri (Tax1, Tax2, vs.) zaten değerleri vardı ama bir döngü kullanmak ve başka değişkene semboller atamak istedi. Bu yüzden yukarıdaki iki cevap bana bunu başarmanın bir yolunu verdi. Bu, bir değerin atamasının daha sonra gerçekleşebileceği için sorunuzu yanıtlarken yardımcı olabilir.

output=NULL 
for(i in 1:8){ 
    Tax=eval(as.symbol(paste("Tax",i,sep=""))) 
    L_Data1=L_Data_all[which(L_Data_all$Taxon==Tax[1] | L_Data_all$Taxon==Tax[2] | L_Data_all$Taxon==Tax[3] | L_Data_all$Taxon==Tax[4] | L_Data_all$Taxon==Tax[5]),] 
    L_Data=L_Data1$Length[which(L_Data1$Station==Plant[1] | L_Data1$Station==Plant[2])] 
    h=hist(L_Data,breaks=breaks,plot=FALSE) 
    output=cbind(output,h$counts) 
} 
İlgili konular