我正在尝试以文本格式读取360个数据文件。我可以使用以下代码来做到这一点:
temp = list.files(pattern="*.txt")
myfiles = lapply(temp, read.table)
我遇到的问题是文件被命名为“ DO_1,DO_2,... DO_360”,当我尝试将文件导入列表时,它们不保持此顺序。相反,我得到DO_1,DO_10等。是否可以指定文件导入和存储的顺序?我在帮助页面中未找到list.files或read.table的任何内容。任何建议都将不胜感激。
答案 0 :(得分:4)
lapply
将按照文件在temp
中存储的顺序处理文件。因此,您的目标是按照实际考虑的方式对它们进行排序。幸运的是,gtools包中有一个mixedsort
函数,它可以完成您所需要的排序。这是一个快速演示。
> library(gtools)
> vals <- paste("DO", 1:20, sep = "_")
> vals
[1] "DO_1" "DO_2" "DO_3" "DO_4" "DO_5" "DO_6" "DO_7" "DO_8" "DO_9"
[10] "DO_10" "DO_11" "DO_12" "DO_13" "DO_14" "DO_15" "DO_16" "DO_17" "DO_18"
[19] "DO_19" "DO_20"
> vals <- sample(vals)
> sort(vals) # doesn't give us what we want
[1] "DO_1" "DO_10" "DO_11" "DO_12" "DO_13" "DO_14" "DO_15" "DO_16" "DO_17"
[10] "DO_18" "DO_19" "DO_2" "DO_20" "DO_3" "DO_4" "DO_5" "DO_6" "DO_7"
[19] "DO_8" "DO_9"
> mixedsort(vals) # this is the sorting we're looking for.
[1] "DO_1" "DO_2" "DO_3" "DO_4" "DO_5" "DO_6" "DO_7" "DO_8" "DO_9"
[10] "DO_10" "DO_11" "DO_12" "DO_13" "DO_14" "DO_15" "DO_16" "DO_17" "DO_18"
[19] "DO_19" "DO_20"
因此,您只想这样做
library(gtools)
temp <- mixedsort(temp)
在致电lapply
的{{1}}通话之前。