我试图在以下可重复的示例中找到问题的要点:
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
,正如我所期望的那样。
答案 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
。