R get()函数错误

时间:2013-03-08 21:52:58

标签: 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)

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

找不到功能&#34;得到&lt; - &#34;

同样,我可以使用:

调用m.1
eval(as.name(list.name[1]))

但是R返回类似的&#39;找不到功能&#39;我尝试填充矩阵时出错。

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

修改/更新

因此,在我尝试简化在此发布的问题时,我意识到我可能已经过度简化了我试图做的事情。

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

所以,事实上,我的问题会更准确地说明:

get(list.names[1])[1,1] <- some_value

有几条回复建议我根据我的原帖使用分配,但考虑到我正在尝试分配&#39;对象中的元素而不是整个对象,这种方法不起作用。

很抱歉这个混乱。

2 个答案:

答案 0 :(得分:3)

使用函数assign代替get

assign(list.names[1],c(1,2,3,4))

get返回一个对象的值,assign分配。 :)

eval相同,它只是评估你的电话。

答案 1 :(得分:3)

这在FAQ 7.21中得到了解决。该FAQ中最重要的部分是它使用列表的结尾(真实列表,而不是您上面列出的列表的向量)。如果你的全球工作空间中有一个matricies列表而不是一堆matricies,那么很多事情会变得容易多了。这是一个例子:

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 )

这比弄乱getassign简单得多。