我有一个也许是基本的问题,我已经在网上搜索。我有一个阅读文件的问题。虽然,我设法读取我的文件,遵循@Konrad的建议,我很感激:如何让R从一个大目录下的多个子目录中读取文件?使用sapply的列表和矩阵
这是一个类似的问题,但是,我没有解决它。
我的问题:
我有一大批具有相同名称的不同文件夹中(“tempo.out”)的文件。这tempo.out有5列/标题。而且他们都具有1048行5列的格式相同:
ID XY时间温度
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)
我想提取每个那些数以千计的文件中的第五列(临时),并计算这样的作为分位数。
我第一次尝试阅读“RESS”
后者没有给出错误,所有子文件的,但我的主要问题是“data.filesf”不是一个矩阵,但名单,居然第5列不我所期望的。然后如下:
matr5 <- do.call(rbind, subs5)
也没有给出所需的值/结果。
什么可能是最好的方式来获得列将成为一个巨大的矩阵?
锋线:我建议要么你'sapply(...,简化= FALSE)'或使用'lapply',否则这是一个有点脆弱。例如,如果你传递一个2个文件名的向量,它应该返回一个*'list' *,在这种情况下,你可以用'data.filesf [[1]]'符号访问每个文件。然而,如果运气不好,你的文件名列表只有一个long,那么'sapply'(no simplification = FALSE)将返回一个单一的矩阵或data.frame,data.filesf [[1]]会显着没有做你期望的事情。 – r2evans
我已经把自己弄糊涂了......请给出一些样本输入(例如,重复两次的虚拟3x3数据框)和预期的输出。 – r2evans