R - 使用assign()函数对数组进行子集化

时间:2015-09-30 20:19:42

标签: r assign

我试图在以下可重复的示例中找到问题的要点:

mat <- matrix(3:6,nr=2,nc=2)
j=1
> eval(parse(text=paste0("m",c("a","b")[j],"t","[1,1]")))
[1] 3
> assign(paste0("m",c("a","b")[j],"t","[1,1]"),45)
> mat
      [,1] [,2]
[1,]    3    5
[2,]    4    6

我的问题是mat[1,1]仍然等于3而不是45,正如我所期望的那样。

1 个答案:

答案 0 :(得分:1)

关于R的初级读本:"Every operation is a function call."在实际意义上,这意味着您不能仅使用assign()来使用mat。 mat [1,1]不是名称 - 名称为[,函数调用为mat[1,1]。因此,在assign中使用表达式mat[1,1]将无法正常工作,因为它正在尝试查找名为eval(parse(text=paste0("m",c("a","b")[j],"t","[1,1] <- 45"))) eval(parse(text=paste0("m",c("a","b")[j],"t","[1,1]"))) 的R对象(我认为这有几个原因是灾难性的......)< / p>

这似乎是一个非常奇怪的用例。您可能想要考虑使用一个函数,该函数有自己的环境,您无需在全局环境中工作即可操作。

或者,你可以这样做:

eval()

我正在努力想出你想要的理由 - 但从理论上讲,这是可能的。基本上,您只需将分配添加到要解析的文本中,然后将其传递给UIView