R get() 函数错误

use*_*737 4 r

我正在尝试填充一组矩阵,其中矩阵(对象)名称保存在列表中。我可以使用 get() 返回具有给定名称的对象,但是当我使用 get() 定义要填充的矩阵对象时遇到了函数问题。

#Create list of matrix names:
list.names <- c("m.1")

#Create matrix object
m.1 <- matrix(nrow=2,ncol=2)

#Return matrix m.1 from the list.names using get(). Works great!
get(list.names[1])

#Populate m.1 with some values. Doesn't work.
get(list.names[1]) <- c(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

所以在最后一行代码中,我收到一个错误:

找不到函数“get<-”

同样,我可以使用以下方法调用 m.1:

eval(as.name(list.name[1]))
Run Code Online (Sandbox Code Playgroud)

但是当我尝试填充矩阵时,R 返回类似的“找不到函数”错误。

有人可以在这里解释我的方法中的错误吗?

编辑/更新:

因此,在我试图简化在这里发布的问题时,我意识到我可能过于简化了我想要做的事情。

所以,事实上,我试图在一组矩阵中​​填充元素。矩阵的名称包含在 list.names 对象中。我使用嵌套的 for() 循环来填充矩阵中的每个元素。

所以,事实上,我的问题会更准确地表述为:

get(list.names[1])[1,1] <- some_value
Run Code Online (Sandbox Code Playgroud)

一些回复建议我根据我的原始帖子使用分配,但鉴于我试图在对象中而不是整个对象中“分配”一个元素,这种方法将不起作用。

对困惑感到抱歉。

Gre*_*now 5

这在 FAQ 7.21 中得到解决。该常见问题解答中最重要的部分是它说使用列表的结尾(一个真正的列表,而不是您在上面调用列表的向量)。如果您在全局工作空间中有一个矩阵列表而不是一堆矩阵,那么很多事情都会变得容易得多。下面是一个例子:

mnames <- c('m.1','m.2','m.3')
m.1 <- matrix(1, 2, 2)
m.2 <- matrix(2, 2, 2)
m.3 <- matrix(3, 2, 2)

## put matricies into a list
mymats <- lapply( mnames, get )
names(mymats) <- mnames

## change 1 value in each matrix a different way
mymats[['m.2']][1,1] <- 22
mymats[[1]][2,2] <- 11
tmp <- "m.3"
mymats[[tmp]][1,2] <- 33

## change the same element in each matrix using a loop
for( i in seq_along(mymats) ) {
 mymats[[i]][2,1] <- 44
}

## apply the same function to every matrix and simplify the output
sapply( mymats, rowMeans )
Run Code Online (Sandbox Code Playgroud)

这比搞乱get和要简单得多assign