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

时间:2018-10-18 08:53:11

标签: r file output rscript

我有一个简单的问题,无法找到简单的解决方案。我将R用于数据分析管道,并且要将输出路径设置为全局变量。然后,各种功能都应使用它来保存表格和绘图。我想避免不得不将此变量传递给每个函数。所以我做了以下事情:

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

如果我在工作环境中仅使用outpath-variable调用Rstudio中的function1(),则此方法运行良好。但是,如果我想使用“ Rscript”在另一个工作站上运行整个脚本,则会出现以下错误:

  

as.vector(x,“ character”)中的错误:

     

不能将“ closure”类型强制为“ character”类型的向量

我假设我正在弄乱R如何处理环境。也许有人比我有更好的理解:)

编辑:在本地计算机上运行Windows而工作站在Linux上运行Windows可能会引起人们的兴趣。

2 个答案:

答案 0 :(得分:1)

将输出路径放入函数

outpath <- "../results/"

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

function1(outpath)

答案 1 :(得分:1)

相对路径是灾难的根源,尤其是当R脚本不是从所有系统上的完全相同的位置运行时。

如果您是 sure — 100% sure —该脚本将始终从一致的位置运行,那么您可以输入:< / p>

outpath_prefix <- "../results/"

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

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

阅读该功能的帮助页面(?file.path),专门针对此gem:

  

该实现被设计为快速(比粘贴更快),因为此功能在R本身中得到广泛使用。

但是

考虑使用“项目”概念并安装here软件包。

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

- `.here` 
- `.projectile`

对项目使用版本控制(这总是 的好主意),并确保.git文件位于项目的根目录中。

然后,您可以执行以下操作:

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

位于项目目录中的任何脚本顶部,无论深度如何仍然可以:

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

获取与平台无关的,不易出错的且生成速度更快的输入/输出路径规范。