r - 在与远程位置不同的本地位置开发时如何处理 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
仍然在寻找答案
解决方案
我找到了两个主要的解决方案,主要来自这个线程,也来自 hrbrmstr 的评论:
- 理想情况下,您不应该将路径硬编码到脚本中。引用 Jenny Bryan 的话,“...一个功能更像命令行实用程序的 R 脚本...从外部位置和进程(例如 cron)调用。我认为这表明它应该更像命令行实用程序,例如,期望获得通过参数或环境变量传递给它的输入和输出的路径。”
library(rprojroot) this.file.path <- dirname(thisfile()) new.loc <- file.path(this.file.path, 'relative/path/to/other/file')
我最终选择了第二个选项,但将来可能会选择第一个,因为thisfile()
只能通过获取脚本/从命令行调用它来使用(如果你只是尝试在 Rstudio 中运行它的一行,它会返回 Null )。
推荐阅读
- javascript - 带有prop数组的Vue JS CheckBoxGroup作为v-model
- php - Node.js Etsy 中的 OAuth
- android - 在模拟 OpenGL ES 2.0 支持的 AVD 上更快的动画
- python-3.x - 创建一个文件,文件名是列表中的一个项目
- python - 由 Apple 的 Retina 显示屏引起的 Kivy 像素测量问题
- html - 设置 translate3d 独立于其他变换
- time - 存储任意计划数据的好方法是什么?
- git - 视觉工作室设置项目重建错误
- javascript - 使用 Firefox (Ubuntu) 拒绝 CORS 请求
- java - 在 android studios 中获得通货膨胀异常