我有一个装满了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循环尝试了几件事,但没有任何效果。
答案 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]])
}