我想想出一个办法来解决我昨天问的这个问题:
rpy2 fails to import 'rgl' R package
我的目标是检查某些包是否安装在R
内python
内。在
按照Dirk Eddelbuettel在对his answer的评论中给出的建议,我使用installed.packages()
函数来列出所有可用的包。在
到目前为止我得到的是:
from rpy2.rinterface import RRuntimeError
from rpy2.robjects.packages import importr
utils = importr('utils')
def importr_tryhard(packname, contriburl):
try:
rpack = utils.installed_packages()
except RRuntimeError:
rpack = []
return rpack
contriburl = 'http://cran.stat.ucla.edu/'
rpack = importr_tryhard(packname, contriburl)
print rpack
它将返回一个相当大的表单输出:
^{pr2}$我只需要提取安装的包的名称,所以第一列或第二列就足够了。在
我尝试过使用np.loadtxt()
、np.genfromtxt()
和with open(rpack) as csvfile:
,但是没有一个能够返回列或行被正确分隔的列表/数组(它们实际上都失败了,错误不同)。在
如何以列的形式读取这个输出,或者更确切地说,在列表/数组中提取已安装包的名称?在
在您的例子中,
rpack
是一个rpy2.robjects.vectors.Matrix
对象。因此,您只需使用rpy2类方法.rx()
来提取列:试试看。在
我以前没有使用过
r2py
,但它看起来像是某种r2py
对象,而且它可能有一个选项来只抓取第一列。在不过,您可以像文本文件一样解析它;当您调用
print XXX
时,它会获取对象的字符串表示形式。在尝试这样做:
您应该同时尝试
str
和repr
方法来获得字符串表示,但是有些人不会同时使用这两种方法,或者使用它们的方式不同。在不过,这并不是最干净的方法,您必须确保正确地解析数据。尝试打印
dir(rpack)
,看看是否有任何属性听起来像是包含了您想要的内容。在稍微挖掘一下,安装的软件包文档,以及快速浏览一下
^{pr2}$R
教程,就可以这样做:相关问题 更多 >
编程相关推荐