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 回答