我已经在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
,所以仍在寻找答案
答案 0 :(得分:0)
我找到了两个主要的解决方案,主要来自this thread和hrbrmstr的评论:
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"
}