我想使用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变量中。)无论如何,这不是我的紧急问题。我只想添加这些信息,以防它可能与我的问题有关。
答案 0 :(得分: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
)。如果它导致问题,您可能想尝试其中一个。
将包含R.dll的目录添加到PATH变量似乎也是一个好主意。
我能想到的最后一件事是关于你对lib_loc的使用。虽然rpy2
的文档指出importr
的此选项应指向库,但Portfolio Portfolio的CRAN page指出必须编译包。可能不太可能,您的软件包是否可以通过(例如)install.packages("PortfolioAnalytics")
安装,或者至少不正确?在这种情况下,您的lib_loc
值可能指向正确的目录,但实际上并未编译库。
大致我的所作所为:
R_HOME
和R_USER
环境变量,并将包含R.dll的目录添加到我的PATH
。install.packages("package_name")
,并考虑here中接受的答案。之后,运行代码对我没有任何错误。 (在Windows 10上使用Python 2.7和R 3.3.0从命令行,IDLE和Eclipse(PyDev)测试。)
如果这对您没有帮助,也许您可以分享一些有关您目前尝试过的内容的更多信息。
编辑:我能够部分重现所描述的行为,它似乎与lib_loc
的使用有关。似乎没有importr
的详细文档,也没有使用lib_loc
的详细文档。在确保正确安装软件包之后,我尝试使用lib_loc
参数指定其位置。以下目录都是为此目的的无效值:
我检查过的全部内容。但是,我很确定,将程序包安装到/R_DIR/library
(由于Windows限制,如果R未安装在任何系统目录中,如Program Files
,则效果最佳)应该不必指定{ {1}}。如果我是正确的,这是一个可行的解决方法,特别是如果您刚开始设置R环境。
实际上,lib_loc
命令(我认为)在某些时候出现了另一个问题并且已经解释过here。如链接中所述,这与Windows中缺少的importr
功能有关,并由Preet Kukreti的回答为我解决。