在R中创建工作簿时循环浏览多个列表

在R中创建工作簿时循环浏览多个列表,r,R,我最近从这个网站上得到了一个R脚本,用R创建Excel工作簿。它对我来说非常有用,只是现在我想在不同的“输入”和“输出”文件中循环这个脚本,但我不知道如何做。我知道我可能必须创建如下列表 f.in = c("Stata/Results/1st stage p/vrs/", "Stata/Results/1st stage p/crs/", "Stata/Results/1st stage np/vrs/", "Stata/Results/1st stage np/crs/") 及

我最近从这个网站上得到了一个R脚本,用R创建Excel工作簿。它对我来说非常有用,只是现在我想在不同的“输入”和“输出”文件中循环这个脚本,但我不知道如何做。我知道我可能必须创建如下列表

f.in = c("Stata/Results/1st stage p/vrs/",
  "Stata/Results/1st stage p/crs/",
  "Stata/Results/1st stage np/vrs/",
  "Stata/Results/1st stage np/crs/")

但无论如何,下面的脚本是我目前拥有的。我一直在运行脚本,注释掉了
.in
.out
文件中的不同行,但这是非常低效的

require(data.table)
require(XLConnect)

rm(list = ls())

setwd("S:/X productivity")

#folder/where/CSV_files_are_located

#folder = "Stata/Results/1st stage p/vrs/"
#folder = "Stata/Results/1st stage p/crs/"
#folder = "Stata/Results/1st stage np/vrs/"
folder = "Stata/Results/1st stage np/crs/"

#path/to/file.xlsx

#f.out <-  "Stata/Results/1st stage p/summaryVRS.xlsx"
#f.out <-  "Stata/Results/1st stage p/summaryCRS.xlsx"
#f.out <-  "Stata/Results/1st stage np/summaryVRS.xlsx"
f.out <-  "Stata/Results/1st stage np/summaryCRS.xlsx"

## load in file
wb <- loadWorkbook(f.out, create=TRUE)

## get all files
pattern.ext <- "\\.csv$"
files <- dir(folder, full=TRUE, pattern=pattern.ext)

## Grab the base file names, you can use them as the sheet names
files.nms <- basename(files)
files.nms <- gsub(pattern.ext, "", files.nms) #get rid of the .csv extention

i <-0
for (nm in files) {
  ## ingest the CSV file
  temp_DT <- fread(nm)

  ## Create the sheet where the file will be outputed to 
  i <-i+1
  fn <-files.nms[i]
  createSheet(wb, name=fn)

  ## output the csv contents
  writeWorksheet(object=wb, data=temp_DT, sheet=i, header=TRUE, rownames=NULL)
}

saveWorkbook(wb)
require(data.table)
需要(XLConnect)
rm(list=ls())
setwd(“S:/X生产率”)
#文件夹/CSV文件所在的位置
#folder=“Stata/Results/1st stage p/vrs/”
#folder=“Stata/Results/First stage p/crs/”
#folder=“Stata/Results/1st stage np/vrs/”
folder=“Stata/Results/1st stage np/crs/”
#路径/to/file.xlsx

#f、 所以我花了更多的时间思考这个问题,经过多次尝试和错误,我终于找到了解决办法!我在这里分享我的代码。当我搜索答案时,我发现许多有经验的R用户评论说R的一个优点是它能够避免使用循环。所以,如果你们中有人能想出其他聪明的方法来循环2个列表,我很乐意学习它们

require(data.table)  ## for fast fread() function
require(XLConnect)

rm(list = ls())

setwd("S:/Controller productivity")

infolder = c("Matlab/Results/3rd stage p/vrs/original/",
         "Matlab/Results/3rd stage p/crs/original/",
         "Matlab/Results/3rd stage np/vrs/original/",
         "Matlab/Results/3rd stage np/crs/original/")

outfile =c("Stata/Results/1st stage p/summaryVRS.xlsx",
       "Stata/Results/1st stage p/summaryCRS.xlsx",
       "Stata/Results/1st stage np/summaryVRS.xlsx",
       "Stata/Results/1st stage np/summaryCRS.xlsx")

j <-0
for (inname in infolder) {

  j<-j+1

#folder/where/CSV_files_are_located
folder = inname

#path/to/file.xlsx
f.out <- outfile[j]

## load in file
wb <- loadWorkbook(f.out, create=TRUE)

## get all files
pattern.ext <- "\\.csv$"
files <- dir(folder, full=TRUE, pattern=pattern.ext)

## Grab the base file names, you can use them as the sheet names
files.nms <- basename(files)
files.nms <- gsub(pattern.ext, "", files.nms) #get rid of the .csv extention

i <-0
for (anything in files) {
  ## ingest the CSV file
  temp_DT <- fread(anything)

  ## Create the sheet where the file will be outputed to 
  i <-i+1
  fn <-files.nms[i]
  createSheet(wb, name=fn)

  ## output the csv contents
  writeWorksheet(object=wb, data=temp_DT, sheet=i, header=TRUE, rownames=NULL)
}

saveWorkbook(wb)

}
require(data.table)##for fast fread()函数
需要(XLConnect)
rm(list=ls())
setwd(“S:/Controller生产率”)
infolder=c(“Matlab/Results/3rd stage p/vrs/original/”,
“Matlab/Results/3rd stage p/crs/original/”,
“Matlab/Results/3rd stage np/vrs/original/”,
“Matlab/Results/3rd stage np/crs/original/”)
outfile=c(“状态/结果/第一阶段p/summaryVRS.xlsx”,
“状态/结果/第一阶段p/summaryCRS.xlsx”,
“状态/结果/第一阶段np/summaryVRS.xlsx”,
“状态/结果/第一阶段np/summaryCRS.xlsx”)

j由于您在一小时内没有任何点击率,您现在应该使用以下命令搜索其他SO问题:
[r]循环列表文件目录
。我想你会发现很多成功的例子。若你们并没有找到任何完美的匹配,但有一个几乎解决了它,你们有一个剩余的问题,然后编辑你们的问题。(否则我预测它将作为另一个如何循环文件的问题被关闭。)谢谢你的建议!老实说,我很惊讶,我认为这对任何有经验的R用户来说都是一个简单的解决方案……你知道我是否可以将我的问题发送给几个特定的用户,他们以前回答过我的问题,我认为谁应该能够解决它?我简要地查看了你的个人资料,你似乎也是一个有经验的R用户。你能告诉我为什么我的问题如此棘手吗?我想这是因为我有两个而不是一个需要同时循环的列表,这使得这个问题很棘手……我不会称之为“困难的cookie”,事实上,它可能很容易调试。这几乎可以肯定是不可复制的,因为您正在访问仅在设备上可用的材料。它也很可能在过去以某种形式被询问和回答,没有证据表明你在发布之前曾试图寻找答案。由于您没有发布任何错误消息,因此我无法确定在您进行操作时可能会出现什么问题。
require(data.table)  ## for fast fread() function
require(XLConnect)

rm(list = ls())

setwd("S:/Controller productivity")

infolder = c("Matlab/Results/3rd stage p/vrs/original/",
         "Matlab/Results/3rd stage p/crs/original/",
         "Matlab/Results/3rd stage np/vrs/original/",
         "Matlab/Results/3rd stage np/crs/original/")

outfile =c("Stata/Results/1st stage p/summaryVRS.xlsx",
       "Stata/Results/1st stage p/summaryCRS.xlsx",
       "Stata/Results/1st stage np/summaryVRS.xlsx",
       "Stata/Results/1st stage np/summaryCRS.xlsx")

j <-0
for (inname in infolder) {

  j<-j+1

#folder/where/CSV_files_are_located
folder = inname

#path/to/file.xlsx
f.out <- outfile[j]

## load in file
wb <- loadWorkbook(f.out, create=TRUE)

## get all files
pattern.ext <- "\\.csv$"
files <- dir(folder, full=TRUE, pattern=pattern.ext)

## Grab the base file names, you can use them as the sheet names
files.nms <- basename(files)
files.nms <- gsub(pattern.ext, "", files.nms) #get rid of the .csv extention

i <-0
for (anything in files) {
  ## ingest the CSV file
  temp_DT <- fread(anything)

  ## Create the sheet where the file will be outputed to 
  i <-i+1
  fn <-files.nms[i]
  createSheet(wb, name=fn)

  ## output the csv contents
  writeWorksheet(object=wb, data=temp_DT, sheet=i, header=TRUE, rownames=NULL)
}

saveWorkbook(wb)

}