Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将函数应用于列表中所有有意义的组合,并以矩阵格式保存_R_Function_Matrix_Lapply - Fatal编程技术网

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)