3

好的,情况如下:我有以下数组列表:

N <- c('A', 'B', 'C')
ll <- sapply(N, function(x) NULL)
ll <- lapply(ll, function(x) assign("x", array(0, dim = c(2,2)))) .

现在我想用给定的数量替换这些数组中位置 [1,1] 的元素,比如 10。我在做什么,按照这个问题在这里。也就是说,我正在执行以下操作:

x <- lapply(ll, function(x) {x[1,1] <- 10}),

这应该使 xa 列表包含三个 2x2 数组,其中 [1,1] 元素等于 10,所有其他元素等于 0。而不是那样,我看到的是:

> x <- lapply(ll, function(x) {x[2,1] <- 10})
> x
$A
[1] 10

$B
[1] 10

$C
[1] 10

对这里发生的事情有任何想法吗?

4

2 回答 2

4

你没有返回整个向量。因此,返回最后一个参数。也就是说,当你这样做时,

x <- lapply(ll, function(x) {x[2,1] <- 10})

你打算说:

x <- lapply(ll, function(x) {x[2,1] <- 10; return(x)})

如果您不指定返回值,则默认返回最后一个分配的值,即 10。相反,您应该使用return(x)或等效x地如下所示:

x <- lapply(ll, function(x) {x[2,1] <- 10; x})
# $A
#      [,1] [,2]
# [1,]    0    0
# [2,]   10    0
# 
# $B
#      [,1] [,2]
# [1,]    0    0
# [2,]   10    0
# 
# $C
#      [,1] [,2]
# [1,]    0    0
# [2,]   10    0
于 2013-04-11T23:03:19.580 回答
0

虽然apply通常是首选,但这里有一个替代方案,只是为了拥有一个:

for (i in 1:3) ll[[i]][2,1] <- 10
于 2013-04-12T15:05:17.033 回答