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

rpy2: No output when importing R libraries that are not standard R libraries

我想使用rpy2包。当我导入不属于标准库的 R 的 PortfolioAnalytics 库时,我不再获得任何输出。 (我 运行 我的 python 代码直接来自 Windows 上的空闲,而不是通过 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")

    print 'check output 2'

输出:

    check output 1

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

    RuntimeError: R_USER not defined.

(我已经把R的bin目录添加到PATH变量中了。)不管怎样,这不是我急需解决的问题。我只是想添加此信息,以防它可能与我的问题有关。

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

我试图重现您的错误,但我做不到。以下是我的想法:

  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 Analytics 的 CRAN page 指出必须编译包。这可能不太可能,是不是您的软件包没有通过(例如)install.packages("PortfolioAnalytics") 安装,或者至少没有正确安装?在那种情况下,您的 lib_loc 值可能指向正确的目录,但库实际上并未编译。

大致是我所做的:

  1. 安装 R
  2. 安装Python
  3. 下载并安装 visual c++ compiler for python
  4. 设置R_HOMER_USER环境变量并将包含R.dll的目录添加到我的PATH.
  5. 使用 R 命令行通过 install.packages("package_name") 安装 PortfolioAnalytics(及其所有依赖项),同时考虑来自 here.
  6. 的已接受答案

在那之后,运行 你的代码对我来说没有错误。 (在 Windows 10 上使用 Python 2.7 和 R 3.3.0 从命令行、IDLE 和 Eclipse (PyDev) 进行测试。)

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

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

  • /R_DIR/library
  • /R_DIR/library/投资组合分析
  • /R_DIR/library/投资组合分析/库
  • /R_DIR/library/PortfolioAnalytics/libs/x64
  • /R_DIR/library/PortfolioAnalytics/libs/i386

我检查的就是这些。但是,我相当确定,将软件包安装到 /R_DIR/library 中(如果 R 没有安装在像 Program Files 这样的任何系统目录中,由于 Windows 的限制,效果最好)应该可以不必指定 lib_loc。如果我是正确的,那是一个可行的解决方法,尤其是当您刚刚开始设置 R 环境时。

实际上在 importr 命令(我认为)的某个时候发生了一个不同的问题并且已经解释过 here。正如 link 中所解释的,这与 Windows 中缺少的 ls 函数有关,并由 Preet Kukreti 的回答为我解决了。