在升级到R-2.14之前,我想借此机会合理化已安装软件包的文件夹结构。
目前我使用R默认值,即所有新安装的软件包都转到R_LIBS_USER。但是,我真的区分了两类包:
plyr
,data.table
等由于install.packages
提供了一个指定lib
参数的选项,显然这是可能的。
是否有一种简单的方法来管理包裹位置,例如通过在.RProfile
或RProfile.Site
?
答案 0 :(得分:25)
有很多选择。我做的第一件事是调整我的Rprofile.site以包含以下行,使我的默认库路径成为我的R安装中未包含的目录。
.libPaths(c("D:/R/Library",.libPaths()))
这使D:/R/Library
成为我的默认路径,而不会丢失其他路径。您可以添加两个路径,例如D:/R/Library/Work
和D:/R/Library/Test
。如果您未在install.packages()
中指定lib,则放在第一个位置的是默认值。
然后,您可以在.Rprofile.site中分配两个变量。这些在基本命名空间中分配,因此始终可以访问,而不是由ls()删除。像
这样的东西 .libwork <- 'D:/R/Library/Work'
.libtest <- 'D:/R/Library/Test'
允许您安装以下软件包:
install.packages('aPackage',lib=.libwork)
我猜也有其他选择,但这就是我要滚动的方式。
答案 1 :(得分:21)
Hadley的优秀包devtools
提供了一个功能dev_mode
http://www.inside-r.org/packages/cran/devtools/docs/dev_mode
您可以在此处找到一个示例用法:https://gist.github.com/1150934
基本上,
dev_mode(TRUE, path = "anywhere-you-want-to-install")
install.packages("anything-that-you-want-to-install")
是一种强有力的方式。
答案 2 :(得分:4)
您应该能够通过环境变量R_LIBS中以冒号分隔的路径列表指定多个库路径/树。我无法在R 2.13.1-patched上可靠地工作 - 它只需要第一个条目。我让R_LIBS
和R_LIBS_USER
在我的系统上可靠地工作 - 我通常只设置前者。
.libPaths()
可以为搜索到的库树集添加新路径。我只需在.libPaths(new)
中添加适当的.Rprofile
调用,即可为每个会话添加相关树。然后,您可以选择在安装时安装软件包的位置 - 即使用哪个树。
答案 3 :(得分:2)
要回答,我必须提供一些背景信息。
出于可重现性的目的,我尝试编写内容,包括我的整个R设置。我有一个脚本“initializeR.r”,其中包括安装软件包,我已经安排了软件包,例如与缓存有关的软件包,与可视化,抽样,空间统计等有关的软件包 - 我自己的小东西任务视图,如果你愿意的话。
例如,这是一个片段:
# Profiling & testing
Packages$CodingTools = c("codetools","debug", "profr","proftools","RUnit")
我将一些捆绑包组合成“主要”包(或主要)列表,其他捆绑包进入“辅助”列表。我肯定会在主列表中安装所有内容 - 这些都需要有一个合理的R环境,使用我自己的脚本,函数和包等。(顺便说一下,有些软件包分配给多个软件包,但只有少数几个;在处理汇总列表之前,我会删除它。)
然后我指定一个特定于平台的默认库,并安装到那里。但是,此功能是可扩展的,并且可以扩展此功能以包括每个软件包(或软件包)的可选位置:只需从软件包名称映射,例如, “CodingTools”到一个唯一的目录(库路径),比如“D:/ R / Library / CodingTools”。这可以在初始化脚本中完成,匹配列表&amp;默认选项,或位置可以存储在别处,例如哈希表,JSON或数据库。
正如其他人所说,默认库路径需要传递给R.可以在.RProfile.site中完成。在我的例子中,我有另一个脚本,用于初始化我想要的R实例。我尝试避免使用R读取的外部参数文件(例如.Rprofile),而是通过我自己的包中的函数调用进行所有初始化(尽管参数仍然是外部的)。这往往使我更容易调试和重现我的工作。因此,我的库路径可以包含在指定数据文件位置的同一种JSON中。
就个人而言,我想摆脱在脚本中定义bundle而不是使用JSON,因为我可以更轻松地为不同的设置配置创建不同的JSON文件。我已经将其用于可重复工作的大多数其他目的。