r - 在 dplyr 管道操作中将 here() 函数与 map() 集成
问题描述
我最近阅读了这篇文章,该文章建议不要在脚本中使用 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)
这行得通,但它非常笨重,我觉得应该有一个更优雅的解决方案,但我不知道它是什么。
谢谢!
解决方案
您可以使用full.names = TRUE
indir()
获取完整的文件路径,而不是通过粘贴创建文件路径:
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)
推荐阅读
- qt - 在 qt/qml 中具有外部“委托”的 ListView
- c++ - 修复此编译错误:标识符“and”是 C++ 中的特殊运算符名称 [-Werror=c++-compat]?
- javascript - 如何将您的输入数据与从服务接收的数据进行比较,以检查有效性(Angular)
- angular - 如何使用插值将值作为参数传递给函数
- java - 如何从资源中读取 Json 文件
- heroku - 如何使用 pgAdmin4 编辑数据库以连接 Heroku
- azure - Azure 媒体播放器在视频播放时中断
- ios - 使用 storyboard?.instantiate 返回“意外发现 nil”错误
- ansible - Ansible模块获取windows的所有服务信息
- c - 为什么在 C 中使用外部库时 eclipse 不调试?