【问题标题】:Sweave can't load R packagesSweave 无法加载 R 包
【发布时间】:2011-12-16 18:43:57
【问题描述】:

我将 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 时,它会拾取所有正确的文件夹。我不知道为什么当从 textmate 完成时会做不同的事情。

有什么想法吗?

【问题讨论】:

  • +1 用于记录您已经对 R 的这个有点令人困惑的方面所做的研究。
  • 如何开始 Sweave 可能很重要;这个问题是关于一个类似的问题,其中 TeXShop 所做的事情与仅在命令行上运行不同,因此必须以不同的方式更改正确的环境变量。 stackoverflow.com/q/7509395/210673

标签: r textmate sweave


【解决方案1】:

感谢 Josh,我意识到问题不在于 R 本身,而在于 textmate。

由于选项 --vanilla 在两个包中都设置为默认选项,Sweave 和 R 包都没有获取我的本地存储库。

这是我的解决方案:

R 捆绑包

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

编织包

  1. 在 Textmate 中,转到 Bundles>Bundles Editor>Show Bundles Editor
  2. 点击 Sweave 捆绑包展开
  3. 转到 Sweave、Typset & View 并向下滚动,直到看到以下行:echo -e "setwd('$SW')\nSweave('$TM_FILEPATH')" | R --vanilla --quiet | pre
  4. 将 --vanilla 更改为 --save
  5. 重新加载包

快乐的日子又回来了:-)

【讨论】:

    【解决方案2】:

    尝试在位于$R_HOME/etc/"Rprofile.site" 文件中添加这样的一行。 (这里,$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 /资源/库”
    • 这对于R.home() 来说似乎是一个奇怪的值(尽管在 Mac 上可能会出现这种情况)。鉴于您的默认.libPaths() 值指向的目录,我希望看到更像"/Library/Frameworks/R.framework/Versions/2.14/Resources" 的内容。在我的电脑上,R.home() 返回"C:/R/R-2.14.0",即包含R_HOME/libraryR_HOME/etc 的目录(包含"Rprofile.site" 的目录
    • 看起来这与 TextMate 启动 Sweave 的位置有关。要确认这一点,您可以在 R 会话中尝试Sweave("docName.Snw")(而不是从命令行运行 Sweave 或让 TextMate 启动它)吗?
    • 乔希,你是对的。当我从 R 中 Sweave 文件时,它会正确拾取所有文件。所以我想知道当我从 textmate 中转出时发生了什么?
    • 真的不知道,因为这本质上是一个文本问题。至于解决方案,您可以尝试将etc/Rprofile.site 放在textmate 为您运行Sweave 时用作R.home() 目录的目录中。要从其他人那里获得帮助,您可能会在显着位置编辑您的问题以说出您所学到的内容。此外,您可以投票赞成这个答案,因为它确实指向了您的问题的根源,正如我所预料的那样;)最后,请使用您最终找到的任何解决方案进行更新。
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2021-06-15
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多