设置所有函数用于将文件保存到 R 的全局路径变量

Set a global path variable that all functions use to save files to R

我有一个简单的问题,但找不到简单的解决方案。我将 R 用于数据分析管道,我想将输出路径设置为全局变量。然后,各种函数应该使用它来保存表格和图表。我想避免将这个路径变量传递给每个函数。所以我所做的是:

outpath <- "../results/"
function1 <- function(){
    ... # analysis
    write.table(result, file = paste0(outpath,"/function1results.xls"))
    }

如果我在工作环境中使用输出路径变量在 Rstudio 中调用 function1(),这 运行 没问题。但是,如果我想 运行 另一个工作站上的整个脚本 "Rscript" 我会收到以下错误:

Error in as.vector(x, "character") :

cannot coerce type 'closure' to vector of type 'character'

我假设我搞砸了 R 处理环境的方式。也许有人比我更了解:)

编辑:可能有兴趣的是我在本地机器上 运行 宁 windows 而工作站 运行s linux。

将输出路径放入函数中

outpath <- "../results/"

function1 <- function(out){
    ... # analysis
    write.table(result, file = paste0(out,"/function1results.xls")
}

function1(outpath)

相对路径是灾难的根源,特别是如果 R 脚本不是来自所有系统上的 运行 来自完全相同的位置。

如果您确定 — 100% 确定 — 此脚本将始终 运行 从一个一致的位置,然后你可以把:

outpath_prefix <- "../results/"

在脚本顶部并使用 file.path() 函数以与平台无关的方式将路径连接在一起:

file.path(outpath_prefix, "function1results.xls")

阅读有关该函数的帮助页面 (?file.path),专门针对此 gem:

The implementation is designed to be fast (faster than paste) as this function is used extensively in R itself.

然而

考虑使用 "project" 概念并安装 here 包。

要么使用适当的 "project"(即 RStudio 定义的标准)在项目的根目录中放置一个“project-name.Rproj”,要么创建这些文件之一(它们可以是空的) 在项目根目录下:

- `.here` 
- `.projectile`

对项目使用版本控制(总是一个好主意)并确保.git文件是在项目的根目录下。

那么你可以这样做:

outpath_prefix <- here::here("results")

在项目目录中任何脚本的顶部不管深度并且仍然做:

file.path(outpath_prefix, "function1results.xls")

为 input/output.

获取与平台无关、不易出错且生成速度更快的路径规范