rpy2:导入非标准R库的R库时没有输出

时间:2016-06-14 08:39:52

标签: python rpy2

我想使用rpy2包。当我导入不属于标准库的R的PortfolioAnalytics库时,我不再获得任何输出。 (我在Windows上直接从Idle运行我的python代码,而不是通过Windows控制台运行(因为我在下面概述的问题)。)

示例:

第一个代码正常工作:

    import rpy2.robjects as robjects
    from rpy2.robjects.packages import importr

    print 'check output 1'
    utils = importr("utils")        # 'utils' belongs to the standard lib

    print 'check output 2'

输出:

    check output 1
    check output 2

到目前为止一切顺利。但是在下面的示例中它将不再起作用。

第二段代码不起作用:

    import rpy2.robjects as robjects
    from rpy2.robjects.packages import importr

    print 'check output 1'
    utils = importr("PortfolioAnalytics", lib_loc = "C:\username\Documents\R\win-library\3.3")

    print 'check output 2'

输出:

    check output 1

附加说明: 我不确定以下是否与问题有关:当我想使用Windows控制台执行我的代码时,我收到错误

    RuntimeError: R_USER not defined.

(我已将R的bin目录添加到PATH变量中。)无论如何,这不是我的紧急问题。我只想添加这些信息,以防它可能与我的问题有关。

1 个答案:

答案 0 :(得分:1)

这应该是评论,但我还不能写评论。

我试图重现你的错误,我无法解决。以下是我的想法:

  1. 在Windows上安装R时,我被迫设置了R_USER。我不知道你是如何解决这个问题的,但我认为这样做是个好主意。
    有不同版本的R可用。最新的(R 3.3.0)确实将R.dll存储在this post中指定的目录中,这应该是R_HOME应该指向的。我在其他地方看到人们使用更高级目录(.../R/R-x.y.z/)或不同目录(.../R/R-x.y.z/bin/i386)。如果它导致问题,您可能想尝试其中一个。

  2. 将包含R.dll的目录添加到PATH变量似乎也是一个好主意。

  3. 我能想到的最后一件事是关于你对lib_loc的使用。虽然rpy2的文档指出importr的此选项应指向库,但Portfolio Portfolio的CRAN page指出必须编译包。可能不太可能,您的软件包是否可以通过(例如)install.packages("PortfolioAnalytics")安装,或者至少不正确?在这种情况下,您的lib_loc值可能指向正确的目录,但实际上并未编译库。

  4. 大致我的所作所为:

    1. 安装R
    2. 安装Python
    3. 下载并安装visual c++ compiler for python
    4. 设置R_HOMER_USER环境变量,并将包含R.dll的目录添加到我的PATH
    5. 使用R命令行安装PortfolioAnalytics(及其所有依赖项)与install.packages("package_name"),并考虑here中接受的答案。
    6. 之后,运行代码对我没有任何错误。 (在Windows 10上使用Python 2.7和R 3.3.0从命令行,IDLE和Eclipse(PyDev)测试。)

      如果这对您没有帮助,也许您可​​以分享一些有关您目前尝试过的内容的更多信息。

      编辑:我能够部分重现所描述的行为,它似乎与lib_loc的使用有关。似乎没有importr的详细文档,也没有使用lib_loc的详细文档。在确保正确安装软件包之后,我尝试使用lib_loc参数指定其位置。以下目录都是为此目的的无效值:

      • / R_DIR /文库
      • / R_DIR /库/ PortfolioAnalytics
      • / R_DIR /库/ PortfolioAnalytics /库
      • / R_DIR /库/ PortfolioAnalytics /库/ 64
      • / R_DIR /库/ PortfolioAnalytics /库/ I386

      我检查过的全部内容。但是,我很确定,将程序包安装到/R_DIR/library(由于Windows限制,如果R未安装在任何系统目录中,如Program Files,则效果最佳)应该不必指定{ {1}}。如果我是正确的,这是一个可行的解决方法,特别是如果您刚开始设置R环境。

      实际上,lib_loc命令(我认为)在某些时候出现了另一个问题并且已经解释过here。如链接中所述,这与Windows中缺少的importr功能有关,并由Preet Kukreti的回答为我解决。