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

R - using the assign() function for subsetting an array

我试图在以下可重现的示例中了解我的问题的要点:

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

R 入门:"Every operation is a function call." 从实际意义上讲,对于您的问题,这意味着您不能将 assign() 与名称一起使用。 mat[1,1] 不是名称 - 它是名称 mat 和函数调用 [。因此,在 assign 中使用表达式 mat[1,1] 是行不通的,因为它试图找到一个名为 mat[1,1] 的 R 对象(出于某些原因,我认为这是灾难性的......)

这似乎是一个非常奇怪的用例。您可能想考虑在一个函数中工作,它有自己的环境,您可以在不在全局环境中工作的情况下进行操作。

或者,您可以这样做:

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]")))

我正在努力想出一个你想要的理由 - 但从理论上讲,这是可能的。基本上,您只需将赋值添加到您正在解析的文本中,然后将其传递给 eval().