ファイルを自然な順序(人間の順序とも呼ばれます)で並べ替える簡単な方法はありますか?つまり、file9.csvはfile10.csvの前にありますか?list.files()には、並べ替え順序のオプションがないようです。
他の言語(ここなど)には多くの実装があり、 RosettaコードにはC、Perl、Pythonなどのソリューションしかありません。
ファイルを自然な順序(人間の順序とも呼ばれます)で並べ替える簡単な方法はありますか?つまり、file9.csvはfile10.csvの前にありますか?list.files()には、並べ替え順序のオプションがないようです。
他の言語(ここなど)には多くの実装があり、 RosettaコードにはC、Perl、Pythonなどのソリューションしかありません。
「ヒューマンソート」は、架空のAIシステムでのみ利用できる狂人の幻想ですが、適切なコンテキスト知識を持っている場合にのみ利用できます。
このためには、ファイル名からメタデータを抽出し、それらを使用してファイルを注文するために、いくつかの簡単な正規表現を使用する必要があります。
files<-c("file9.txt","file10.txt");
as.numeric(gsub('^file([0123456789]*)\\.txt$','\\1',files))->fileNum;
files[order(fileNum)]
file09.csvという名前を付けてみてください...
filenames <- paste0("file", 0:20, ".txt")
new_filenames <- sub("file([[:digit:]])\\.txt", "file0\\1\\.txt", filenames)
is_different <- new_filenames != filenames
file.rename(filenames[is_different], new_filenames[is_different])
コメントで@baptisteが指摘しているように、mixedsort()
またはmixedorder()
パッケージから使用できます。gtools