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变量中了。)不管怎样,这不是我急需解决的问题。我只是想添加此信息,以防它可能与我的问题有关。
这应该是评论,但我还不能写评论。
我试图重现您的错误,但我做不到。以下是我的想法:
在 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
)。如果它导致问题,您可能想尝试其中之一。
将包含 R.dll 的目录添加到您的 PATH 变量中似乎也是一个好主意。
我能想到的最后一件事是你对 lib_loc 的使用。虽然 rpy2
的文档指出 importr
的这个选项应该指向库,但 Portfolio Analytics 的 CRAN page 指出必须编译包。这可能不太可能,是不是您的软件包没有通过(例如)install.packages("PortfolioAnalytics")
安装,或者至少没有正确安装?在那种情况下,您的 lib_loc
值可能指向正确的目录,但库实际上并未编译。
大致是我所做的:
- 安装 R
- 安装Python
- 下载并安装 visual c++ compiler for python
- 设置
R_HOME
和R_USER
环境变量并将包含R.dll的目录添加到我的PATH
.
- 使用 R 命令行通过
install.packages("package_name")
安装 PortfolioAnalytics(及其所有依赖项),同时考虑来自 here. 的已接受答案
在那之后,运行 你的代码对我来说没有错误。 (在 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 的回答为我解决了。
我想使用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变量中了。)不管怎样,这不是我急需解决的问题。我只是想添加此信息,以防它可能与我的问题有关。
这应该是评论,但我还不能写评论。
我试图重现您的错误,但我做不到。以下是我的想法:
在 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
)。如果它导致问题,您可能想尝试其中之一。将包含 R.dll 的目录添加到您的 PATH 变量中似乎也是一个好主意。
我能想到的最后一件事是你对 lib_loc 的使用。虽然
rpy2
的文档指出importr
的这个选项应该指向库,但 Portfolio Analytics 的 CRAN page 指出必须编译包。这可能不太可能,是不是您的软件包没有通过(例如)install.packages("PortfolioAnalytics")
安装,或者至少没有正确安装?在那种情况下,您的lib_loc
值可能指向正确的目录,但库实际上并未编译。
大致是我所做的:
- 安装 R
- 安装Python
- 下载并安装 visual c++ compiler for python
- 设置
R_HOME
和R_USER
环境变量并将包含R.dll的目录添加到我的PATH
. - 使用 R 命令行通过
install.packages("package_name")
安装 PortfolioAnalytics(及其所有依赖项),同时考虑来自 here. 的已接受答案
在那之后,运行 你的代码对我来说没有错误。 (在 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 的回答为我解决了。