循环遍历列表 - 看起来像是循环两次

时间:2017-05-18 10:24:53

标签: r

我是R的新手,正在玩耍。

我询问目录并将目录中的文件列表返回给名为files的变量。然后我想依次打开每个文件。看起来当我打印文件名时它打开每个文件两次,当我只想要一次。我的问题是如何将每个文件读入变量met一次? - 一旦读入文件,我将最终使用它进行其他操作。

请参阅下面的代码:

  strPathToDirectory <- "C:/Users/Stacey/Documents/R/Proj/RawDatabase/"
files <- list.files(strPathToDirectory)
length (files)


for(val in 1:length(files)){
  met <- openxlsx::read.xlsx(paste0(strPathToDirectory,files[val]),colNames=FALSE)
 print(files[val])
}

下面是我得到的控制台输出:

[1] "2016_Q3.xlsx"
[1] "2016_Q3.xlsx"
[1] "2016_Q4.xlsx"
[1] "2016_Q4.xlsx"

正如您所看到的那样,每个文件都会被查询两次。

3 个答案:

答案 0 :(得分:1)

不确定为什么会这样。生成虚拟文件后,此示例代码基本相同,输出仅显示每个文件一次:

tmpdir <- tempdir()
for(i in 1:5){
  data <- data.frame(matrix(rnorm(10), nrow = 5))
  write.xlsx(data, file = paste(tmpdir, sprintf("file%s.xlsx", i), sep = "/"))
}
files <- list.files(tmpdir, pattern = 'xlsx')

length(files)

for(val in 1:length(files)){
  met <- openxlsx::read.xlsx(paste(tmpdir, files[val], sep = "/"))
  print(files[val])
}

输出:

[1] "file1.xlsx"
[1] "file2.xlsx"
[1] "file3.xlsx"
[1] "file4.xlsx"
[1] "file5.xlsx"

答案 1 :(得分:0)

我无法重现您的问题 - 您是否尝试重新运行代码,以防您更改了某些内容? 如果unique()函数仍然列出每个文件两次,您只需使用for函数,过滤掉双重条目,然后重新运行TextIO.Read.from(filePattern) 循环。

答案 2 :(得分:0)

据悉,有时视觉工作室需要重启 - 不确定原因 - 但它解决了问题。感谢所有回复的人,非常感谢