好的,情况如下: 我有以下数组列表:
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
关于这里发生了什么的任何想法?
答案 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