Créez un nom de variable avec “coller” dans R?

Voir ci-dessous:

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

Que faire si je veux atsortingbuer une valeur à perf.a1 ?

J’ai essayé as.name , as.symbol , etc., sans résultat:

 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 

Vous pouvez utiliser assign ( doc ) pour modifier la valeur de perf.a1:

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

Voir ?assign

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

Dans mon cas, la fonction eval () fonctionne très bien. Ci-dessous, je génère 10 variables et leur atsortingbue 10 valeurs.

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

Dans mon cas, les symboles que je crée (Tax1, Tax2, etc.) avaient déjà des valeurs mais je voulais utiliser une boucle et assigner les symboles à une autre variable. Donc, les deux réponses ci-dessus m’ont donné un moyen d’y parvenir. Cela peut être utile pour répondre à votre question, car l’atsortingbution d’une valeur peut avoir lieu plus tard.

 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) }