我正在处理一些列表和矩阵,我在处理数据方面遇到了一些问题。假设我定义了以下矩阵和列表(仅作为示例):
m1 <-array(rexp(5),dim=c(3,3,3))
mn <-apply(m1,1:2,mean)
ms <-apply(m1,1:2,sum)
msqr <-apply(ms,1:2,sqrt)
list1 <- list(mn,ms)
list2 <- list(ms,msqr)
然后,我想从m1(具有不同的维度)中减去mn,但是避免循环..我的意思是,到目前为止,我做了类似的事情:
dif <- array(NA,dim=c(3,3,3))
for(i in 1:3){
for(j in 1:3){
dif[i,j,]<- m1[i,j,]-mn[i,j]
}
}
另一方面,我想将两个列表相乘:list1和list2(逐个元素),以获得另一个,list3具有相同数量的元素。 我正在努力尝试...但我做得不好..我想我可以在两个例子中使用一些功能(mapply或sapply),但我看不出怎么样......有什么建议吗?
谢谢!
答案 0 :(得分:2)
对于第一部分,我们可以复制'mn'值以创建与'm1'大小相同的array
,然后进行元素减法
dif1 <- m1-array(rep(mn, dim(m1)[3]), dim(m1))
identical(dif, dif1)
#[1] TRUE
对于第二种情况,mapply
可用于在list
s的相应元素之间进行乘法。
mapply(`*`, list1, list2, SIMPLIFY = FALSE)
或我们unlist
list
,*
然后relist
relist(unlist(list1) * unlist(list2), skeleton = list1)