Я хочу применить функцию (расстояние между матрицами расстояний) к списку матриц расстояний и извлечь вычисленное значение в формате матрицы / таблицы.
Использование пакета ecodist
для расчета и вложенного lapply
для создания всех возможных комбинаций вычисления расстояния 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)))
Это делает все против всех возможных комбинаций, но мне нужно, чтобы все комбинации были только одним способом (половина матрицы), так как расчет занимает очень много времени, и результат для второй половины одинаков. Есть идеи, как это решить?
Часть 2:
Я бы хотел собрать только значение dist
в $coef
для каждого вычисления в матричном формате для последующей обработки. В этом случае 1.000000e+00
.
R вывод выглядит так:
> head(grazedist[[1]])
[[1]]
[[1]]$`coef`
dist(grazelist[[z]]) pval
Int 8.881784e-16 1
dist(grazelist[[f]]) 1.000000e+00 1
[[1]]$r.squared
R2 pval
1 1
[[1]]$F.test
F F.pval
3.753766e+18 1.000000e+00
Я знаю, как получить его как файл txt
или csv
для простого вывода R, не обработанного из списка (и называемого MRM_calculation
).
write.table(MRM_calculation$coef[2,1],file="file.txt")
Но как я могу собрать все dist
значения $coef
во фрейме данных, в таблице или непосредственно в матричном формате из списка?
что-то вроде:
mapply(write.csv2, x=grazedist$coef,
file=paste(names(grazedist),"value.csv"))
Я использую матрицы большего размера (1500x1500) в списке, но надеюсь, что данные примера graze
достаточны в качестве воспроизводимого примера.