Ответ 1
Вы можете использовать assign
(doc), чтобы изменить значение perf.a1:
> assign(paste("perf.a", "1", sep=""),5)
> perf.a1
[1] 5
См. ниже:
paste("perf.a", "1", sep="")
[1] "perf.a1"
Что делать, если я хочу присвоить значение perf.a1
?
Я пробовал as.name
, as.symbol
и т.д., безрезультатно:
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
Вы можете использовать assign
(doc), чтобы изменить значение perf.a1:
> assign(paste("perf.a", "1", sep=""),5)
> perf.a1
[1] 5
См. ?assign
.
> assign(paste("tra.", 1, sep = ""), 5)
> tra.1
[1] 5
В моем случае функция eval() работает очень хорошо. Ниже я генерирую 10 переменных и присваиваю им 10 значений.
lhs <- rnorm(10)
rhs <- paste("perf.a", 1:10, "<-", lhs, sep="")
eval(parse(text=rhs))
В моем случае символы, которые я создал (Tax1, Tax2 и т.д.), уже имели значения, но я хотел использовать цикл и назначать символы другой переменной. Итак, эти два ответа дали мне способ сделать это. Это может быть полезно при ответе на ваш вопрос, поскольку назначение значения может иметь место в любое время позже.
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)
}