在R中评估自定义表达式

时间:2014-08-05 14:31:03

标签: r

我需要为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并没有给我任何线索。请帮忙!

2 个答案:

答案 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