我需要为R中的自定义设计变量分配一个矩阵。所以这里是矩阵:
A = matrix(c(2,4,3,1,7,5),nrow=2,ncol=3,byrow=TRUE)
这是自定义设计的变量名称:
G <- "Pakka"
我现在在这里创建表达式:
G <- paste(G, "<- A")
现在我需要评估表达式,以便将矩阵A
分配给名为Pakka
的变量。
eval(parse(G))
但是,R
说
Not able to open file name `Pakka <- A`. No file of that name found.
灼烧environment
并没有给我任何线索。请帮忙!
答案 0 :(得分:2)
上述问题中的eval(parse(G))
必须由eval(parse(text=G))
替换。
这将解决问题。
答案 1 :(得分:2)
您应该真正使用eval(call())
或delayedAssign
。
使用 eval(call())
:
"<-"
是一种特殊类型的函数,因此我们可以将其保存为未评估的call
。然后,当我们准备好评估它时,我们只用eval
包装它。这就是设计这种类型的任务的方式。
> A <- matrix(c(2,4,3,1,7,5),nrow=2,ncol=3,byrow=TRUE)
> G <- "Pakka"
> e <- call("<-", as.name(G), substitute(A))
查看e
表明这正是我们想要做的。
> e
# Pakka <- A
现在我们eval
使用它,Pakka
已分配给A
。
> eval(e)
> Pakka
# [,1] [,2] [,3]
#[1,] 2 4 3
#[2,] 1 7 5
> A <- matrix(c(2,4,3,1,7,5),nrow=2,ncol=3,byrow=TRUE)
使用 delayedAssign
我们可以创建承诺(未评估的对象):
> delayedAssign("Pakka", A)
> ls()
[1] "A" "Pakka" ## Pakka is there, but not in memory yet
> Pakka
# [,1] [,2] [,3]
#[1,] 2 4 3
#[2,] 1 7 5