R 将函数应用于列表中所有有意义的组合,并以矩阵格式保存
我想将函数(距离矩阵之间的距离)应用于距离矩阵列表,并以矩阵/表格格式提取计算值 使用R 将函数应用于列表中所有有意义的组合,并以矩阵格式保存,r,function,matrix,lapply,R,Function,Matrix,Lapply,我想将函数(距离矩阵之间的距离)应用于距离矩阵列表,并以矩阵/表格格式提取计算值 使用ecodist包进行计算,并嵌套lappy以实现MRM距离计算的所有可能组合 第1部分: library("ecodist") #example data data(graze) #make list to get it looking like my data grazelist<-as.list.data.frame(graze) #all vs all dist
ecodist
包进行计算,并嵌套lappy
以实现MRM
距离计算的所有可能组合
第1部分:
library("ecodist")
#example data
data(graze)
#make list to get it looking like my data
grazelist<-as.list.data.frame(graze)
#all vs all distance combination
grazedist<-lapply(names (grazelist),function(z)
lapply(names(grazelist),function(f)
MRM(dist(grazelist [[z]])~ dist(grazelist[[f]]),nperm=1)))
我知道如何将它作为txt
或csv
文件,用于未从列表中处理的简单R输出(称为MRM\u计算
)
但是如何从列表中以数据帧、表格或直接矩阵格式收集$coef
的所有dist
值呢
比如:
mapply(write.csv2, x=grazedist$coef,
file=paste(names(grazedist),"value.csv"))
我在列表中使用了更大的矩阵(1500x1500),但希望示例数据
graze
足以作为一个可复制的示例。您可以使用combn
,它仅为示例数据生成351个组合,而不是使用嵌套lappy
生成729个组合(27 X 27)。然后,您可以使用combn
中的FUN
参数将函数应用于每个组合,并在coef
中提取dist
值并将其写入数据帧
library(ecodist)
df <- data.frame(value = combn(names(grazelist), 2, function(x)
MRM(dist(grazelist[[x[1]]])~ dist(grazelist[[x[2]]]),nperm=1)$coef[[2]]))
谢谢你的建议!为了更好地理解,
,2,
在combn(名称(grazelist),2,函数(x)
之间做了什么?@KonradWeber 2指定了从向量名称(grazelist)
中选择的元素数量。因此在本例中,它创建了两个名称的组合。请参见combn(c(“ab”,“cd”,“ef”),2)的输出示例
。您也可以在?combn
上阅读更多有关它的信息。
mapply(write.csv2, x=grazedist$coef,
file=paste(names(grazedist),"value.csv"))
library(ecodist)
df <- data.frame(value = combn(names(grazelist), 2, function(x)
MRM(dist(grazelist[[x[1]]])~ dist(grazelist[[x[2]]]),nperm=1)$coef[[2]]))
write.csv(df, "/path/to/file/filename.csv", row.names = FALSE)