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}),

これにより、[1,1] 要素が 10 に等しい 3 つの 2x2 配列の xa リストが作成され、他のすべての要素は 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)orを使用する必要があります。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 に答える