3

重複の可能性:
Rはそれ自体でベクトルをソートします-悪い子です!
Rを使用して、ディレクトリ内のファイルをソートされた順序で読み取るにはどうすればよいですか?

以下のコードはうまく機能しました。ただし、問題は、dir1と入力して結果を確認すると、Rがファイルを次のように並べ替えていることがわかりました。

[1] "data1.flt"   "data10.flt"  "data100.flt" "data101.flt"
[5] "data102.flt" "data103.flt" "data104.flt" "data105.flt"
[9] "data106.flt" "data107.flt" "data108.flt" "data109.flt"
[13] "data11.flt"  "data110.flt" "data111.flt" "data112.flt"
[17] "data113.flt" "data114.flt" "data115.flt" "data116.flt"
.
.
to
.
.
[357] "data91.flt"  "data92.flt"  "data93.flt"  "data94.flt"
[361] "data95.flt"  "data96.flt"  "data97.flt"  "data98.flt"
[365] "data99.flt"

これは間違った結果につながります。Rに1から365まで順番に読み取りを開始するように指示する方法(私はsort(dir1)を使用しましたが、それらをソートしませんでした)。何かのようなもの :

[1] "data1.flt"   "data2.flt"  "data3.flt" "data4.flt"

みたいではなく:

[1] "data1.flt"   "data10.flt"  "data100.flt" "data101.flt"

コードは次のとおりです。

dir1 <- list.files("C:\\Users", "*.flt", full.names = TRUE)
results <- list()
for (.files in seq_along(dir1)){
    file2 <- readBin(dir2[.files], double(), size = 4, n = w * 67420, signed = TRUE)
    results[[length(results) + 1L]] <- file1[file1 != -9999]*10
}
for (i in seq_along(results)){
    fileName <- sprintf("C:\\New folder (2)\\NewFile%03d.bin", i)
    writeBin(as.integer(results[[i]]), fileName, size = 2)
} 
4

2 に答える 2

7

数値を解釈しないため、代わりに文字列を並べ替えます

于 2012-05-28T14:44:29.090 に答える
4

ファイルの名前の構造がわかっている場合は、から直接取得する代わりに、それを使用できますdir

for(i in seq(365)){
    filename <- paste0("data", i, ".flt")
    # Do some stuff with filename
}

paste0R 2.15で導入されたため、古いバージョンでは次のものが必要になります。

for(i in seq(365)){
    filename <- paste("data", i, ".flt", sep = "")
    # Do some stuff with filename
}

あなたが混乱しているように見えるので、さらに編集します。ファイル名は、ループの反復ごとに更新されます。これは、毎回ファイル名を印刷することで確認できます。

for(i in seq(365)){
    filename <- paste("data", i, ".flt", sep = "")
    print(filename)
    # Do some stuff with filename
}
于 2012-05-28T14:51:06.627 に答える