替换列表中的数组元素(R)

时间:2013-04-11 23:00:16

标签: r

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

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.我正在做什么,遵循这个问题here。也就是说,我正在做以下事情:

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

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

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

$B
[1] 10

$C
[1] 10

关于这里发生了什么的任何想法?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

for (i in 1:3) ll[[i]][2,1] <- 10