我有一个简单的问题,无法找到简单的解决方案。我将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可能会引起人们的兴趣。
答案 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")
获取与平台无关的,不易出错的且生成速度更快的输入/输出路径规范。