Lihat di bawah:
paste("perf.a", "1", sep="")
# [1] "perf.a1"
Bagaimana jika saya ingin memberikan nilai perf.a1
?
Saya mencoba as.name
,, as.symbol
dll., Tetapi tidak berhasil:
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
Jawaban:
Anda dapat menggunakan
assign
( doc ) untuk mengubah nilai perf.a1:> assign(paste("perf.a", "1", sep=""),5) > perf.a1 [1] 5
sumber
assign(paste0("perf.a", "1"), 5)
sedikit lebih rapiLihat
?assign
.> assign(paste("tra.", 1, sep = ""), 5) > tra.1 [1] 5
sumber
Dalam kasus saya, fungsi eval () bekerja dengan sangat baik. Di bawah ini saya menghasilkan 10 variabel dan menugaskannya 10 nilai.
lhs <- rnorm(10) rhs <- paste("perf.a", 1:10, "<-", lhs, sep="") eval(parse(text=rhs))
sumber
a <- rnorm(1); a - eval(parse(text=paste(a)))
tidak kembali0
.Dalam kasus saya, simbol yang saya buat (Tax1, Tax2, dll.) Sudah memiliki nilai tetapi saya ingin menggunakan loop dan menetapkan simbol ke variabel lain. Jadi, dua jawaban di atas memberi saya cara untuk mencapai ini. Ini mungkin berguna dalam menjawab pertanyaan Anda karena penugasan nilai dapat dilakukan kapan saja nanti.
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) }
sumber