2016-05-27 3 views
0

私の作業ディレクトリにある既存のファイルの名前を、この名前の部分を使ってlink に変更したかったのです。Rでrename.fileを使用すると、既存のファイルの名前は変更されず、別の名前が作成されるのはなぜですか?

destination<-vector(length = length(files_names)) 
for (i in 1:length(files_names)){ 
    files_names<-list.files(pattern = "*.csv", full.names = TRUE) 
    destination[i]<-substr(files_names[i],3, 8) 
    file.rename(files_names[i], paste(destination[i])) 
} 

しかし、その代わりに、それは私の作業ディレクトリ内の別のファイルを作成した名前を変更すると:これはこれは私が書いたコードでファイル名のリスト

> files_names 
[1] "./AKLBNE_oneway_JobId427508.csv" "./AKLMEL_oneway_JobId427512.csv" 
[3] "./AKLSYD.csv"     "./AMSPEK_oneway_JobId427522.csv" 
[5] "./ATXDXB_oneway_JobId427524.csv" "./AUHLHR_oneway_JobId427528.csv" 
[7] "./BAHDXB_JobId427533.csv"  "./BHMDXB_oneway_JobId427557.csv" 
[9] "./BKKDOH_oneway_JobId427563.csv" "./BKKFRA_JobId427565.csv"  
[11] "./BKKHKG_JobId427568.csv"  "./BKKKIX_JobId427572.csv"  
[13] "./BKKNRT_JobId427575.csv"  "./BNEAKL_oneway_JobId427577.csv" 
[15] "./BOMDXB_JobId427581.csv"  "./BRUDXB_JobId427583.csv"  
[17] "./CANLAX_JobId427585.csv"  "./CANPVG_JobId427588.csv"  
[19] "./CDGCUN_JobId427590.csv"  "./CDGDXB_JobId427594.csv"  
[21] "./CDGIAD_JobId427596.csv"  "./CDGJFK_JobId427598.csv"  
[23] "./CDGKUL_JobId427600.csv"  "./CDGLHR_JobId427603.csv"  
[25] "./CDGNRT_JobId427605.csv"  "./CDGSFO_JobId427607.csv"  
[27] "./CDGYUL_JobId427610.csv"  "./CTUPEK_JobId427613.csv"  
[29] "./SINCDG.csv" 

です。何が問題ですか?

+0

コードを実行することなく、ファイルが別のプロセスによって開かれた場合、そのようなことが起こります。 – rbm

+0

あなたのforループの条件部分では、 'length(files_names)'を使用しますが、なぜforループ自体の中で 'files_names'を再定義しますか? – zyurnaidi

+0

また、ループを目的に使用する必要はありません。 'file.rename(files_names、substr(files_names、3、8))'を試してください。 'substr'関数は大部分のファイルから' csv'拡張を取り除くことに注意してください。 – zyurnaidi

答えて

0

私はこの問題があなたのfiles_namesデータとあなたのfile.renameの機能パラメーターから発生すると思います。

list.files(path, pattern = "\\.csv$", full.names = TRUE)を使用して、ディレクトリにあるcsvファイルのリストを取得してください。

です:

files_names<-list.files(path, pattern = "\\.csv$", full.names = TRUE) 
sapply(files_names, function(x) { 
file.rename(from = x, to=paste0(path, "newName.csv") 
}) 

これは問題なく動作するはずです。

txtファイルの名前を変更するには、次の例を参照してください。

tetstest1.txtからtetstest4.txtまでの4種類のテキストファイル(C:/Users/R files/にあります)があるとします。これらのファイルの名前をnewTextString1newTextString4に変更します。

# path 
# [1] "C:/Users/R files/" 

lst=list.files(path, pattern = "tetstest", full.names = TRUE) 

# lst 
# [1] "C:/Users/R files/tetstest1.txt" "C:/Users/R files/tetstest2.txt" 
# [3] "C:/Users/R files/tetstest3.txt" "C:/Users/R files/tetstest4.txt" 

sapply(lst, function(x) file.rename(from = x, 
to=sub(pattern="tetstest", replacement="newTextString", x))) 


list.files(path, pattern = "tetstest", full.names = TRUE) 
# character(0) 

list.files(path, pattern = "newTextString", full.names = TRUE) 
# [1] "C:/Users/R files/newTextString1.txt" "C:/Users/R files/newTextString2.txt" 
# [3] "C:/Users/R files/newTextString3.txt" "C:/Users/R files/newTextString4.txt" 

あなただけpathpatternreplacementに応じて調整することができます:ここで

は、私たちが何ができるかです。

+0

しかし、これはOPの質問には答えません。 – rbm

+0

どうしてですか? Askerはそれに応じて 'path'と' pattern'を変更するだけです。 – 989

+0

OPの質問は "作業ディレクトリに別のファイルを作成した名前を変更するのはnsteadです。問題は何ですか?"あなたはその質問に答えません。 – rbm

関連する問題