2015-10-15 40 views
0

我正与其他一些用户在各种R项目上合作。为了重复使用尽可能多的代码,我们创建了一个包含多个项目中使用的许多函数的“stdlib.R”文件。如何在使用不同目录结构的多个用户协作时使用R中的source()?

我们以前有访问网络驱动器,所以代码可以利用常见的路径致电:但是现在

source("f:/code/stdlib.R") 

,我们长大了,我不希望依赖于网络驱动器(或任何硬编码路径)的存在。我如何创建使用本地化路径的代码?像这样:

source("%localusrpath%/stdlib.R") 

其中每个用户都有一种方法来定义%localusrpath%对他们意味着什么。

对我来说,它可能是C:/ temp,另一个可能是C:/ users/user123/documents。

只要他们设置了“环境变量”,那么它就会为他们工作。

一种解决方案是使用相对路径只:

source("./stdlib.R") 

但是,如果用户发生了改变,他们的工作目录,这将失败:

swd("c:/anything_else") 

如何建立一个用户特定的环境通过操作系统变量,然后如何检索/使用该变量来连接路径?或者这是一个坏主意?

+4

你应该使'stdlib.R'成为一个完整的包。如果你不打算把它提交给CRAN,它确实没有太多的工作。 – hrbrmstr

+0

这是一个很好的建议,我最终可能会为这个特定的文件做这件事。但是我有很多其他人想与我分享相对路径问题。 。 。我只是选择在这个线程中询问一个来简化问题。我意识到现在我应该表明,我有几十个文件我想分享。 – Jonathan

+0

这使得创建一个包更好的解决方案 – hrbrmstr

回答

0

我找到了我在这个问题寻找:setting the home directory in windows R

我做的不好问的问题,主要是becaue我不知道我需要什么。但最终我希望代码可以跨多台计算机移植,每台计算机都有一个Github账户。因此,通过在每台计算机上设置R_USER系统环境,我可以独立于最终用户的目录结构获取文件。只要每个最终用户将此行放在Rprofile.site文件中。

Sys.setenv(R_USER="/my/desired/path/to/tilde") 
source("~/stdlib.R") 
2

为什么不将stdlib.R文件托管在Github上的所有管理员权限的存储库中?然后,您可以使用devtools::source_url指向Github回购来源文件。

这样你就不必担心在本地机器上拥有最新版本的人们。

+0

一个非常好的主意,我会试着去研究一下。不过,这只是我打算分享的几个文件之一,并且都是托管在私人存储库中的。最终,我希望我们的程序分发给那些无法访问这些存储库的人。所以这听起来像是一个很好的开发解决方案,但不是完整的部署。 – Jonathan

相关问题