Sweave无法加载R软件包

7

我升级了R到v2.14.0,随着升级,我决定将标准包存储库移动到Dropbox中,以便笔记本电脑和台式机始终保持同步。 我在.Renviron中设置了R_LIBS=/Dropbox/ToolBox/R/packages,当打开Rstudio或R.app(mac)时,我会得到以下命令:

> Sys.getenv("R_LIBS")
[1] "/Dropbox/Toolbox/R/packages"

> .libPaths()
[1] "/Dropbox/Toolbox/R/packages"      
[2] "/Library/Frameworks/R.framework/Versions/2.14/Resources/library"
[3] "/Applications/RStudio.app/Contents/Resources/R/library

但是当我在.Snw(Textmate + Sweave)中运行相同的命令时,我会得到:


> Sys.getenv("R_LIBS")
[1] ""

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.14/Resources/library"

正如您在上面所看到的,当我从Sweave调用R时,它只会选择标准存储库。我已经创建了Renviron.siteRprofile.site,阅读了help(Startup),遵循类似问题q1q2,但都没有成功。
请问有人能够详细地指导我如何解决这个问题吗?
更新: 当我从R中进行.Snw Sweave时,它会选择所有正确的文件夹。我不确定为什么从textmate完成时会出现不同的情况。
有任何想法吗?

在记录你已经进行的关于R语言中这个有些混淆的方面的研究时加一分。 - Josh O'Brien
你如何启动Sweave可能很重要;这个问题涉及到一个类似的问题,TeXShop做了一些不同于在命令行上运行的事情,因此必须以不同的方式更改正确的环境变量。https://dev59.com/g1vUa4cB1Zd3GeqPuIPT - Aaron left Stack Overflow
2个回答

3
感谢Josh的帮助,我意识到问题不在R本身,而是在TextMate中。
由于Sweave和R bundles 的默认选项设置了--vanilla,它们都没有使用我的本地存储库。
以下是我的解决方案:

R Bundle

  1. 打开终端并进入$HOME/Library/Application Support/TextMate/Pristine Copy/Bundles文件夹
  2. 键入>mate R.tmbundle,这将直接在textmate中打开R bundle
  3. 在support文件夹中有一个名为tmR.rb的文件
  4. 向下滚动直到找到以下行:stdin, stdout, stderr, pid = my_popen3("R --vanilla --slave --encoding=UTF-8 2>&1")
  5. 删除--vanilla选项并保存

Sweave Bundle

  1. 在Textmate中,转到Bundles>Bundles Editor>Show Bundles Editor
  2. 单击Sweave bundle以展开
  3. 进入Sweave,Typset & View并向下滚动,直到看到以下代码:echo -e "setwd('$SW')\nSweave('$TM_FILEPATH')" | R --vanilla --quiet | pre
  4. 将--vanilla更改为--save
  5. 重新加载bundle
快乐的日子又回来了 :-)

1

尝试在您的"Rprofile.site"文件中添加以下行,该文件位于$R_HOME/etc/中。(这里,$R_HOME是在活动的R会话中运行R.home()返回的目录。)

(您还需要从以下位置删除(可能是暂时的)任何".Rprofile"文件:(a)您的主目录;和(b)当前目录(从中启动R/Sweave)。)

.libPaths(c("/Dropbox/Toolbox/R/packages", 
            .libPaths()))

然后,如果那并没有完全解决问题(但对我来说确实有效),就使用Sweave并将LaTeX应用于一个包含以下代码块的简单.Snw文档。
<<>>=
R.home()
.libPaths()
@

输出应该提供一些有用的提示,以确定问题的来源。

我按照你所说的做了,但不幸的是没有起作用。这是上面代码块的输出:R.home() [1] "/Library/Frameworks/R.framework/Resources"
.libPaths() [1] "/Library/Frameworks/R.framework/Versions/2.14/Resources/library"
- Altons
这似乎是R.home()的一个奇怪值(尽管在Mac上可能是预期的)。鉴于默认.libPaths()值所指向的目录,我希望看到类似于"/Library/Frameworks/R.framework/Versions/2.14/Resources"的内容。在我的PC上,R.home()返回"C:/R/R-2.14.0",这是包含R_HOME/libraryR_HOME/etc(包含"Rprofile.site"的目录)的目录。 - Josh O'Brien
1
这似乎与TextMate启动Sweave的位置有关。为了确认这一点,您可以尝试在R会话中使用Sweave(“docName.Snw”)(而不是从命令行运行Sweave或让TextMate启动它)来进行验证。 - Josh O'Brien
Josh,你说得对。当我在R中从内部编织文件时,它可以正确地捕捉到所有内容。所以我想知道,当我在TextMate中编织时发生了什么? - Altons
其实我也不太清楚,因为这本质上是一个TextMate的问题。至于解决方案,你可以尝试在TextMate运行Sweave时使用作为R.home()目录的目录中放置一个etc/Rprofile.site文件。为了得到他人的帮助,您可以明确地编辑您的问题以表明您所学到的内容。此外,您可以点赞此答案,因为它确实指出了您的问题的来源,正如我所预期的那样 ;) 最后,请务必更新您最终找到的任何解决方案。 - Josh O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接