在与远程位置不同的本地位置开发时,如何处理R中的路径

时间:2018-10-19 17:19:30

标签: r

我已经在RStudio中开发了一个脚本并将其推送到远程服务器。该文件位于一个闪亮的应用程序中,我没有在本地设置闪亮的服务器,而只是在~/projects/app中开发了它,然后将其推送到位于/srv/shinyserver/的远程仓库中。

当我在R Studio中进行本地开发时,我只需设置工作目录并使用相对路径来访问其他文件。但是在远程服务器上,我想从cron作业运行Rscript,并且相对路径将不起作用。服务器上的绝对路径不同,因此它不像切换到绝对路径那样简单。

引用这些文件并继续进行本地和远程开发的最佳方法是什么?

在python中,我过去通过将变量设置为被调用文件的位置来解决此问题:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

编辑:我认为'here'包可能正是我想要的。如果您还有其他解决方案,请告诉我

编辑2:没关系,here不能用克朗代替,因此路径为/home/[user]而不是/srv/shinyserver/app,所以仍在寻找答案

2 个答案:

答案 0 :(得分:0)

我找到了两个主要的解决方案,主要来自this thread和hrbrmstr的评论:

  1. 理想情况下,您不应该将路径硬编码到脚本中。引用詹妮·布赖恩(Jenny Bryan)的话:“ ... R脚本的功能更像是命令行实用程序...是从外部位置和进程(例如cron)调用的。我认为这建议它应该更像命令行实用程序,例如,希望获得通过参数或环境变量传递给它的输入和输出的路径。”
  2. library(rprojroot) this.file.path <- dirname(thisfile()) new.loc <- file.path(this.file.path, 'relative/path/to/other/file')

我最终选择了第二个选项,但是将来可能会使用第一个选项,因为thisfile()仅可用于采购脚本/从命令行调用它(如果您尝试尝试,它将返回Null)。在Rstudio中运行一行代码。

答案 1 :(得分:0)

我过去根据系统“ nodename”设置了文件夹路径。这意味着当我在本地运行代码时,我可以使用本地路径,而当我在其他地方运行时,我将使用其他路径,而无需进行任何代码更改。

# Check your system information, look for nodename
print(Sys.info())

# Set location
if(Sys.info()["nodename"]=="INSERT_NODE_NAME") {
  fPath <- "/localPath"
} else {
  fPath <- "/serverPath"
}