首页 > 解决方案 > 在与远程位置不同的本地位置开发时如何处理 R 中的路径

问题描述

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

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

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

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

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

编辑:我认为“这里”包可能是我正在寻找的。如果您有任何其他解决方案,请告诉我

编辑2:没关系,here不能从crons工作,这使得路径/home/[user]而不是/srv/shinyserver/app仍然在寻找答案

标签: r

解决方案


我找到了两个主要的解决方案,主要来自这个线程,也来自 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()只能通过获取脚本/从命令行调用它来使用(如果你只是尝试在 Rstudio 中运行它的一行,它会返回 Null )。


推荐阅读