如何将不同的函数应用于列表中每个矩阵的不同行?

时间:2012-10-23 20:29:18

标签: r list function matrix

我有一个列表,其中包含几个具有相同行数的矩阵(4)。现在我想将一个像log2(row / something)这样的函数应用于第1行和第4行,将函数如log2(row / something)应用于第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真的不喜欢那种创造性的解决方案。

1 个答案:

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