2017-11-18 24 views
1

Rで複数のCSVファイルを圧縮しようとしています。以下は参考用のコードです。Rで複数のCSVファイルを圧縮する方法は?

# Create two dataframes using inbuilt datasets for reproducible code 
df1 <- head(mtcars) 
df2 <- head(iris) 

# Write the files as CSV into working directory 
write.csv(df1, file = "Test_File1.csv", row.names = FALSE, quote = FALSE) 
write.csv(df2, file = "Test_File2.csv", row.names = FALSE, quote = FALSE) 

# Read the 2 CSV file names from working directory 
Zip_Files <- list.files(path = getwd(), pattern = ".csv$") 

# Zip the files and place the zipped file in working directory 
zip(zipfile = "TestZip", files = Zip_Files) 

以下の警告メッセージが表示されます。 Zipファイルが作成されていません。

Warning message: 
running command '"zip" -r9X "TestZip" "Test_File1.csv" "Test_File2.csv" ' had status 127 

私もCSVファイル名を読み取るために、このコマンドを試してみました:Zip_Files <- list.files(path = getwd(), pattern = ".csv$", full.names = TRUE)しかし、私はまだ上記のような警告メッセージが表示されます。私はすでにWinRAR7-Zipを私のコンピュータにインストールしています。私はRStudioの最新バージョンと一緒に、Rの最新バージョン(3.4.2 64ビット)を使用しています。私はWindows 7 x64 OSを持っています。これに関する助けは本当に感謝しています。

+1

「?zip」というヘルプファイルを見ると、「Windowsでは、デフォルトではパスにあるZipプログラム(Rtoolsなど)が依存しています。あなたのパスに "zip"という名前のプログラムがないようです。コマンドプロンプトを開き、 "zip -h"と入力してみてください。あなたは「内的または外的な命令として認識されない」と思いますか? – G5W

+0

そうです@ G5W。私はちょうどコマンドプロンプトを開き、示唆されたように 'zip-h 'とタイプした。 '' zip 'が内部または外部のコマンド、実行可能なプログラムまたはバッチファイルとして認識されていません。 –

+0

ファイルを解凍して解凍するプログラムがありますか? – G5W

答えて

2

Rのzipには、ファイルを圧縮(圧縮)するコードは実際にはありません。これを行うための外部プログラムを呼び出します。 zipには、使用するプログラムとそのプログラムに与える引数を知らせなければなりません。あなたはこのように、この作品を作ることができるはずです。

zip(zipfile = "TestZip", files = Zip_Files, flags = " a -tzip", 
    zip = "C:\\Program Files\\7-Zip\\7Z") 

7Z、7zipをのコマンドラインバージョンへのパスが異なる場合は、インストールに合うように調整してください。

いくつかの説明:

zip = "C:\\Program Files\\7-Zip\\7Z"引数は、Rどのようなプログラム圧縮を行う使用するように伝えます。この場合、7Zipのコマンドラインバージョンである7Zを指していましたが、他のコマンドラインプログラムを使用して、別のプログラムを指すように変更することができます。

flags = " a -tzip"引数は、使用しているプログラムによって異なります。私はこれを7Zのために設定しました。 7Z documentationを読むと、7Zにコマンド( "a")とフラグ( "-tzip")を与える必要があることがわかります。 "a"コマンドは、これらのファイルをアーカイブに追加することを意味します。 -tzipフラグは、7Zアーカイブの代わりにzipアーカイブにすることを意味します。異なるプログラムでは、ドキュメントを読み、そのプログラムの適切なフラグを作成する必要があります。

更新:あなたは多様な顧客のマシン上でこの機能を持っている必要がある場合は、それが任意の外部プログラムを必要とし、同様の機能を提供しませんzip packageに探して検討すべきです。

+0

この@GSWを見ていただきありがとうございます。私はちょうどいくつかの質問があります。 'flags =" a -tzip "は何をしていますか?また、ユーザが 'Winzip'や' WinRAR'などのシステムにインストールされている場合はどうなりますか?どのようにコードを変更するのですか? –

+0

回答に回答を追加します。 – G5W

+0

本当にありがとうございます。私はこの提案を今日後でテストし、さらに障害物に遭遇した場合にはあなたに知らせていきます。 –

1

zipパッケージをインストールして、コードで使用できます。そうすれば、あなたのコードを使用している人なら誰でも、インストールするか検索することなくファイルを圧縮することができます。

library(zip) 

# Create two dataframes using inbuilt datasets for reproducible code 
df1 <- head(mtcars) 
df2 <- head(iris) 

# Write the files as CSV into working directory 
write.csv(df1, file = "Test_File1.csv", row.names = FALSE, quote = FALSE) 
write.csv(df2, file = "Test_File2.csv", row.names = FALSE, quote = FALSE) 

# Read the 2 CSV file names from working directory 
Zip_Files <- list.files(path = getwd(), pattern = ".csv$") 

# Zip the files and place the zipped file in working directory 
zip::zip(zipfile = "TestZip", files = Zip_Files) 
+0

ありがとうございます、これは@BenoitLondonで動作します!私は実際にはRのような強力な機能のために、 'unzip()'でファイルの解凍をサポートしていますが、ファイル圧縮をサポートしていません! –

関連する問題