我有一个列表,其中包含几个具有相同行数的矩阵(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真的不喜欢那种创造性的解决方案。
答案 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)
})