6

ファイルを自然な順序(人間の順序とも呼ばれます)で並べ替える簡単な方法はありますか?つまり、file9.csvはfile10.csvの前にありますか?list.files()には、並べ替え順序のオプションがないようです。

他の言語(ここなど)には多くの実装があり、 RosettaコードにはC、Perl、Pythonなどのソリューションしかありません。

4

3 に答える 3

8

「ヒューマンソート」は、架空のAIシステムでのみ利用できる狂人の幻想ですが、適切なコンテキスト知識を持っている場合にのみ利用できます。

このためには、ファイル名からメタデータを抽出し、それらを使用してファイルを注文するために、いくつかの簡単な正規表現を使用する必要があります。

files<-c("file9.txt","file10.txt");
as.numeric(gsub('^file([0123456789]*)\\.txt$','\\1',files))->fileNum;
files[order(fileNum)]
于 2013-01-24T08:38:38.857 に答える
2

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])
于 2013-01-24T07:56:53.543 に答える
2

コメントで@baptisteが指摘しているように、mixedsort()またはmixedorder()パッケージから使用できます。gtools

于 2016-03-05T22:52:07.987 に答える