簡體   English   中英

在 R 中用“粘貼”創建一個變量名?

[英]Create a variable name with "paste" in R?

見下文:

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

如果我想給perf.a1怎么perf.a1

我試過as.nameas.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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM