设置所有函数用于将文件保存到 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.
获取与平台无关、不易出错且生成速度更快的路径规范
我有一个简单的问题,但找不到简单的解决方案。我将 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.
获取与平台无关、不易出错且生成速度更快的路径规范