R:在for循环中将输出另存为xlsx

时间:2018-08-27 18:30:32

标签: r

使用(openxlsx)软件包编写xlsx文件。 我有一个变量,它是数字的向量

x <- 1:8

然后我将“ .xlsx”粘贴到x的每个元素的末尾以稍后创建一个xlsx文件

new_x <- paste(x,".xlsx", sep = "")

然后我在forloop中使用(“ openxlsx”)包写入.xlsx,以创建新的xlsx文件

for (i in x) {
for (j in new_x) {
write.xlsx(i,j)
}}

当我打开文件(“ 1.xlsx”-“ 8.xlsx”)时,所有文件上都只有数字“ 8”。我不明白的是,为什么1.xlsx没有数字1-7.xlsx没有数字7,为什么第8个数字覆盖了其他所有内容。

我什至尝试像大多数其他建议一样为数据框创建新的输出

for (i in x) {
for (j in new_x) {
output[[i]] <- i    

write.xlsx(output[[i]],j)
}}

它仍然出现相同的问题。我不明白怎么了。

1 个答案:

答案 0 :(得分:1)

问题是由于嵌套循环,您多次创建每个Excel文件。尝试仅使用一个循环,并引用new_x的元素。

x <- 1:8
new_x <- paste(x,".xlsx", sep = "")
for (i in seq_along(x)) {
    write.xlsx(i,new_x[i])
}

如果您想读取多个.csv文件并将其另存为xlsx文件,这是一种类似的方法,您仍然只希望有一个for循环,例如:

# Define directory of where to look for csv files and where to save Excel files
csvDirectory <- "C:/Foo/Bar/"
ExcelDirectory <- paste0(Sys.getenv(c("USERPROFILE")),"\\Desktop")

# Find all the csv files of interest
csvFiles <- list.files(csvDirectory,"*.csv")

# Go through the list of files and for each one read it into R, and then save it as Excel
for (i in seq_along(csvFiles)) {
  csvFile <- read.csv(paste0(csvDirectory,"/",csvFiles[i]))
  write.xlsx(csvFile, paste0(ExcelDirectory,"/",gsub("\\.csv$","\\.xlsx",csvFiles[i])))
}