0

同じ行数の行列をいくつか保持するリストがあります(4)。ここで、log2(row / something)のような関数を行1と4に適用し、log2(row / something else)のような関数を行2と3に適用したいと思います。

コード内:

# Create list with 2 matrices with 4 rows
l<-list(a=matrix(1:16,nrow=4),b=matrix(17:32,nrow=4))

# Now I thought it might be possible to
nl <- lapply(l, function(x){
  log2(x[c(1,4),]/14)
  log2(x[2:3,]/23)
})

ただし、その結果、の最後の関数のみlapplyが実行されます。また、私はそれが可能かもしれないと思いました:

nl <- l
lapply(nl, function(x) x[c(1,4),]) <- lapply(l, function(x) log2(x[c(1,4),]/14))
lapply(nl, function(x) x[2:3,]) <- lapply(l, function(x) log2(x[2:3,]/23))

しかし、Rはその創造的な解決策を本当に好きではありません。

4

1 に答える 1

0

最初のソリューションが機能するはずですが、関数は最後の部分のみを返します。少し変更する必要がありますか?

l<-list(a=matrix(1:16,nrow=4),b=matrix(17:32,nrow=4))

nl <- lapply(l, function(x){
  x[c(1,4),] <- log2(x[c(1,4),]/14)
  x[2:3,] <- log2(x[2:3,]/23)
  return(x)
})
于 2012-10-23T20:40:35.733 に答える