使用 for 循环写入多个数据帧以更正 excel 个工作表

Write multiple data frames to correct excel sheets using for loops

我有一个嵌套的 for loop 情况,我正在循环几个 excel 工作 sheets,应用几个函数,生成一个 single data.frame 来自每部作品 sheet,并将所有这些写回到 new 工作簿,其 sheet 名称与原始作品相同书。

目前 sheet 名字在新工作簿中是正确的,但是 data frames 继续互相覆盖,以便每个 sheet 都有相同的 data frame.如何让每个 data frame 写入其各自的 excel sheet?

library(xlsx)
library(agricolae)

#Read all worksheets in one file
read_excel_allsheets <- function(filename) {
 sheets <- readxl::excel_sheets(filename)
 x <-    lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
 names(x) <- sheets
 x
  }

mysheets <- read_excel_allsheets("Loop_help.xls")`

for (i in 1:length(mysheets)){  #loop through sheets in workbook

file<-as.data.frame(mysheets[i])

  for(i in 2:ncol(file)){    #loop through columns in sheets

if(var(file[,i]) > 0){   #exclude columns that are all zeros

#create data frame (df)  
#do stuff

}
  #dostuff

  }

  #do more stuff

  n<-excel_sheets("Loop_help.xls") #sheet names

  for (i in 1:length(mysheets)) {#write new sheets to excel
    if (i == 1)
      write.xlsx(df, file="Loop.Help.xls", sheetName = n[i])
    else write.xlsx(df, file="Loop.Help.xls", sheetName = n[i],
                    append = TRUE)       
    }
}

感谢@Parfait 引导我找到这个答案。

我不仅在那里有一个多余的 for loop,而且当我需要使用不同的字母 (k) 时,我在两个循环中都调用了 i

这是最终代码:

for (k in 1:length(mysheets)){#loop through sheets in workbook
  file<-as.data.frame(mysheets[k]) 

  for(i in 2:ncol(file)){#loop through columns in sheets

if(var(file[,i]) > 0){#exclude columns that are all zeros

  #create data frame (df)
  #do stuff
  }
  }
  #do more stuff

  n<-excel_sheets("Loop_help.xls") #sheet names

          if (k == 1)
      write.xlsx(df, file="Loop.help.xls", sheetName = n[k])#write first sheet
    else write.xlsx(df, file="Loop.help.xls", sheetName = n[k],
                    append = TRUE) #append additional sheets

  }