我最近阅读了this帖子,建议不要在脚本中使用setwd(),而推荐使用here()函数。原因很合理,我想使用它,但是我遇到了一些麻烦。具体来说,我有一个函数,可以使用dplyr管道中的map函数读取大量.csv文件。它的工作原理如下:
setwd('directory with files')
files = dir(pattern = '*.csv')
df = files %>%
map(read.csv)
这将创建目录中所有文件的列表,然后可以根据需要使用该文件。不幸的是,由于here()实际上并没有更改目录,它只是暂时指向目录,因此read.csv函数看不到文件。我当前使用的解决方法是:
##no use of setwd() or 'files = '
df = paste(file.path(here('directory with files')), '/',
dir(here('directory with files'), pattern = '*.csv', sep = '') %>%
map(read.csv)
这可行,但是它笨拙,我觉得应该有一个更优雅的解决方案,但我不知道这是什么。
谢谢!
答案 0 :(得分:2)
您可以在full.names = TRUE
中使用dir()
来获取完整的文件路径,而不是通过粘贴来创建文件路径:
dir(here("directory with files"), pattern = '*.csv', full.names = TRUE) %>%
map(read.csv)
此外,如果我要在整个脚本中多次引用目录,我有时会分配一个用于读取/写入的名称,而不是每次都写出here()
代码。
basedir = here("directory with files")
dir(basedir, pattern = '*.txt', full.names = TRUE)