2017-05-18 40 views
0

我是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" 

正如你可以看到它看起来像每个文件被询问两次

蚂蚁帮助非常感谢

谢谢

+0

我不知道你为什么看到这些文件两次,但你的代码可能没有做你想要的东西。 'met'将只包含最后一个文件,而不是全部 –

回答

0

不知道为什么会发生。该示例代码执行基本虚拟文件后一代相同,输出显示只是一次每个文件:

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]) 
} 

OUTPUT:

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

我无法重现你的问题 - 你尝试重新运行你的代码,如果你改变了一些东西?
如果list.files函数仍然列出每个文件两次,则可以简单地使用unique()函数筛选出双项,然后重新运行for循环。

0

了解到,有时视觉工作室需要重新启动 - 不知道为什么 - 但它解决了问题。感谢所有的回复家伙,真的很感谢