我正在使用此代码通过mtime读取我的文件。但是,读取文件的速度非常快,以至于mtime无法正常工作。
###### checks all files in directory ########
readinfiles<-function(){
details<- file.info(list.files("filename", all.files=F, full.name=T));
details<- details[with(details, order(as.POSIXct(mtime))),]
file<- rownames(details)
}
all_files<- readinfiles();
list_all_files<- as.list(all_files);
list_all_files;
有没有办法按字符数字对文件进行排序? 这就是我想要的。
list_all_files;
THREE20142305//tablesCORRECTED///onea
THREE20142305//tablesCORRECTED///twoa
THREE20142305//tablesCORRECTED///threea
THREE20142305//tablesCORRECTED///foura
我得到了什么:
list_all_files;
THREE20142305//tablesCORRECTED///foura
THREE20142305//tablesCORRECTED///onea
THREE20142305//tablesCORRECTED///threea
THREE20142305//tablesCORRECTED///twoa
答案 0 :(得分:1)
可以使用english
包创建一些辅助函数以解决此问题
辅助函数
FileSort <- function(x){
require(english, quietly = TRUE) # Loading the `english` package
Nums <- as.character(english(seq_len(length(x)))) # Creating a vector of integers written in words (with the same length of the file list)
Nums <- gsub("\\s", "", Nums) # Remove spaces so, for example, "twenty two" will become "twentytwo"
temp <- gsub(".*//", "", x) # Retrieving the number out of the file name
temp <- substr(temp, 1, nchar(temp) - 1) # Removing the `a` at the end
x <- Map(cbind, x, match(temp, Nums)) # Adding the Numbers column to the file list
x <- do.call(rbind, x) # Collapsing
x <- as.list(x[order(as.numeric(x[, 2]))]) # Sorting
x
}
您的数据
ist_all_files <- list("THREE20142305//tablesCORRECTED///foura",
"THREE20142305//tablesCORRECTED///onea",
"THREE20142305//tablesCORRECTED///threea",
"THREE20142305//tablesCORRECTED///twoa")
实施
list_all_files <- FileSort(list_all_files)
list_all_files
# [[1]]
# [1] "THREE20142305//tablesCORRECTED///onea"
#
# [[2]]
# [1] "THREE20142305//tablesCORRECTED///twoa"
#
# [[3]]
# [1] "THREE20142305//tablesCORRECTED///threea"
#
# [[4]]
# [1] "THREE20142305//tablesCORRECTED///foura"
答案 1 :(得分:0)
我可以考虑一些方法来开始解决这个问题,但老实说,它们看起来都很不方便。重命名磁盘上的文件是否可行?如果是我,那就是我会做的。将它们命名为
THREE20142305//tablesCORRECTED///01_onea
THREE20142305//tablesCORRECTED///02_twoa
THREE20142305//tablesCORRECTED///03_threea
THREE20142305//tablesCORRECTED///04_foura
然后按名称排序,而不是mtime
。
您可以在比编写R解决方案更短的时间内通过GUI重命名文件,即使其中有100个也是如此。如果定期覆盖这些文件,则编写脚本逐个重命名(使用复制/粘贴)比编写R解决方法可能更快。该剧本将有100条几乎完全相同的行,编写起来很乏味,但仍然比让R理解英文数字更容易。
抱歉这个坏消息。
=============示例预处理脚本=================
file.rename("onea","01")
file.rename("twoa","02")
file.rename("threea","03")
file.rename("foura","04")
file.rename("fivea","05")
file.rename("sixa","06")
file.rename("sevena","07")
file.rename("eighta","08")
file.rename("ninea","09")
file.rename("tena","10")
file.rename("elevena","11")
file.rename("twelvea","12")
file.rename("thirteena","13")
file.rename("fourteena","14")
file.rename("fifteena","15")
file.rename("sixteena","16")
file.rename("seventeena","17")
file.rename("eighteena","18")
file.rename("nineteena","19")
file.rename("twentya","20")
file.rename("twentyonea","21")
file.rename("twentytwoa","22")
file.rename("twentythreea","23")
file.rename("twentyfoura","24")
file.rename("twentyfivea","25")
file.rename("twentysixa","26")
file.rename("twentysevena","27")
file.rename("twentyeighta","28")
file.rename("twentynine","29")
file.rename("twentya","20")
复制粘贴并调整大约10分钟左右(取决于您的文本编辑器搜索/替换技能),将其置于程序的顶部,如果您没有从某人那里获得更好的解决方案,那么您有一个可行的解决方案其他