如何通过矩阵列表迭代函数

时间:2020-09-09 23:05:40

标签: r

我有一个装满了csv文件的文件夹,我已阅读这些文件并将其转换为矩阵。

setwd("~/Desktop/EMD Test")
FilesToProcess <- list.files(pattern = "csv")     
listOfFiles <- lapply(FilesToProcess, function(x){ out = read.csv(x, header=FALSE, stringsAsFactors = FALSE) as.matrix(out) })

现在,我需要对所有文件与第一个文件进行比较来进行EMD计算。手动看起来像这样:

emd(listOfFles[[1]],listOfFiles[[2]])

我想做的就是对ListOfFIles中的所有文件运行此命令

emd(listOfFles[[1]],listOfFiles[[x]])

我用lapply和for循环尝试了几件事,但没有任何效果。

2 个答案:

答案 0 :(得分:0)

如果我们要对lapply元素的所有组合进行成对emd,则可以使用嵌套的list

lapply(seq_along(listOfFles), function(i) lapply(seq_along(ListOfFles),
        function(j) emd(listOfFles[[i]], listOfFles[[j]])))

或者另一个选择是combn,由于减少了组合数量,因此可能更有效

combn(ListOfFles, 2, FUN = function(x) emd(x[[1]], x[[2]]), simplify = FALSE)

答案 1 :(得分:0)

如果要比较第一个文件和所有其他文件。您可以通过这种方式使用for循环。

FilesToProcess <- list.files(pattern = "\\.csv$")
result <- vector('list', length(FilesToProcess) - 1)

for(i in 2:length(FilesToProcess)) {
  result[[i]] <- emd(listOfFles[[1]],listOfFiles[[i]])
}