Cod*_*pra 2 csv zip r zipfile dataframe
我正在尝试在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)
Run Code Online (Sandbox Code Playgroud)
我收到以下警告消息。Zip文件尚未创建。
Warning message:
running command '"zip" -r9X "TestZip" "Test_File1.csv" "Test_File2.csv" ' had status 127
Run Code Online (Sandbox Code Playgroud)
我什至尝试使用此命令读取CSV文件名:Zip_Files <- list.files(path = getwd(), pattern = ".csv$", full.names = TRUE)但是我仍然收到上面显示的警告消息。我已经WinRAR和7-Zip安装在我的电脑。我正在使用最新版本的R(3.4.2 64位)以及最新版本的RStudio。我有Windows 7 x64操作系统。任何帮助,将不胜感激。
问题在于R zip实际上没有压缩(压缩)文件的代码。它调用一个外部程序来做到这一点。您必须zip知道要使用什么程序以及给该程序什么参数。您应该能够像这样进行这项工作:
zip(zipfile = "TestZip", files = Zip_Files, flags = " a -tzip",
zip = "C:\\Program Files\\7-Zip\\7Z")
Run Code Online (Sandbox Code Playgroud)
如果您的7Z命令行版本的7Z路径不同,请进行调整以匹配您的安装。
一些解释:
该zip = "C:\\Program Files\\7-Zip\\7Z"参数告诉R使用哪个程序执行压缩。在这种情况下,我将其指向7Zip的命令行版本7Z,但是您可以通过将其更改为指向其他程序来使用其他命令行程序。
该flags = " a -tzip"参数取决于您使用的程序。我将其设置为7Z。阅读7Z文档,您会发现需要给7Z一个命令(“ a”)和标志(“ -tzip”)。“ a”命令意味着将这些文件添加到归档中。-tzip标志意味着使其成为zip存档而不是7Z存档。对于不同的程序,您需要阅读文档并为该程序构造适当的标志。
更新: 如果需要在不同的客户计算机上使用此功能,则应考虑研究zip软件包。 它不需要任何外部程序,并且提供类似的功能。
您可以安装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)
Run Code Online (Sandbox Code Playgroud)