【发布时间】:2018-02-03 22:46:16
【问题描述】:
我有一个基本的问题,我在网上搜索过。我在读取文件时遇到问题。不过,我设法按照@Konrad 的建议阅读了我的文件,对此我表示赞赏:如何让 R 从一个大目录下的多个子目录中读取文件?
这是一个类似的问题,但是我没有解决它。
我的问题:
我在不同文件夹中有大量同名文件(“tempo.out”)。这个 tempo.out 有 5 列/标题。它们都是相同的格式,1048 行 5 列:
id X Y 时间温度
setwd("~/Documents/ewat")
dat.files <- list.files(path="./ress",
recursive=T,
pattern="tempo.out"
,full.names=T)
readDatFile <- function(f) {
dat.fl <- read.table(f)
}
data.filesf <- sapply(dat.files, readDatFile)
# I might not have the right sintax in sub5:
subs5 <- sapply(data.filesf,`[`,5)
matr5 <- do.call(rbind, subs5)
probs <- c(0.05,0.1,0.16,0.25,0.5,0.75,0.84,0.90,0.95,0.99)
q <- rowQuantiles(matr5, probs=probs)
print(q)
我想提取这数千个文件中每个文件的第五列(temp)并进行分位数等计算。
我首先尝试读取“ress”中的所有子文件
后者没有出错,但我的主要问题是“data.filesf”不是矩阵而是列表,实际上第 5 列不是我所期望的。然后是:
matr5 <- do.call(rbind, subs5)
也没有给出所需的值/结果。
将列放入将成为巨大矩阵的最佳方法是什么?
【问题讨论】:
-
前面:我建议你要么使用
sapply(..., simplify=FALSE),要么使用lapply,否则这有点脆弱。例如,如果你向它传递一个包含 2+ 个文件名的向量,它应该返回一个list,在这种情况下,你可以使用data.filesf[[1]]表示法访问每个文件;但是,如果运气不好,您的文件名列表只有一个长度,那么sapply(没有simplify=FALSE)将返回单个矩阵或 data.frame,而data.filesf[[1]]显然不会达到您的预期。 -
我把自己搞糊涂了……请提供一些示例输入(例如,重复两次的虚拟 3x3 data.frame)和预期输出。
标签: r list matrix dataframe sapply