Zobacz poniżej:
paste("perf.a", "1", sep="")
# [1] "perf.a1"
A jeśli chcę przypisać wartość perf.a1
?
Próbowałem as.name
, as.symbol
itp, z bezskutecznie:
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
Odpowiedzi:
Możesz użyć
assign
( doc ), aby zmienić wartość perf.a1:> assign(paste("perf.a", "1", sep=""),5) > perf.a1 [1] 5
źródło
assign(paste0("perf.a", "1"), 5)
jest trochę schludniejZobacz
?assign
.> assign(paste("tra.", 1, sep = ""), 5) > tra.1 [1] 5
źródło
W moim przypadku funkcja eval () działa bardzo dobrze. Poniżej generuję 10 zmiennych i przypisuję im 10 wartości.
lhs <- rnorm(10) rhs <- paste("perf.a", 1:10, "<-", lhs, sep="") eval(parse(text=rhs))
źródło
a <- rnorm(1); a - eval(parse(text=paste(a)))
nie powraca0
.W moim przypadku symbole, które utworzyłem (Tax1, Tax2 itp.) Miały już wartości, ale chciałem użyć pętli i przypisać symbole do innej zmiennej. Tak więc powyższe dwie odpowiedzi dały mi sposób na osiągnięcie tego. Może to być pomocne w odpowiedzi na twoje pytanie, ponieważ przypisanie wartości może nastąpić w dowolnym momencie.
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) }
źródło