我试图想出一个办法来解决这个问题,我昨天问:读R功能输出列
rpy2 fails to import 'rgl' R package
我的目标是要检查如果某些包内装R
从内python
。
继Dirk Eddelbuettel,我使用的installed.packages()
功能从R
列出所有可用的软件包上his answer在评论中给出的建议。
这是我到目前为止有:
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
它返回一个相当大的输出的形式为:
Package LibPath Version
ks "ks" "/usr/local/lib/R/site-library" "1.8.13"
misc3d "misc3d" "/usr/local/lib/R/site-library" "0.8-4"
mvtnorm "mvtnorm" "/usr/local/lib/R/site-library" "0.9-9996"
rgl "rgl" "/usr/local/lib/R/site-library" "0.93.986"
base "base" "/usr/lib/R/library" "3.0.1"
boot "boot" "/usr/lib/R/library" "1.3-9"
class "class" "/usr/lib/R/library" "7.3-9"
cluster "cluster" "/usr/lib/R/library" "1.14.4"
codetools "codetools" "/usr/lib/R/library" "0.2-8"
compiler "compiler" "/usr/lib/R/library" "3.0.1"
datasets "datasets" "/usr/lib/R/library" "3.0.1"
foreign "foreign" "/usr/lib/R/library" "0.8-49"
graphics "graphics" "/usr/lib/R/library" "3.0.1"
grDevices "grDevices" "/usr/lib/R/library" "3.0.1"
grid "grid" "/usr/lib/R/library" "3.0.1"
KernSmooth "KernSmooth" "/usr/lib/R/library" "2.23-10"
lattice "lattice" "/usr/lib/R/library" "0.20-23"
MASS "MASS" "/usr/lib/R/library" "7.3-29"
Matrix "Matrix" "/usr/lib/R/library" "1.0-14"
methods "methods" "/usr/lib/R/library" "3.0.1"
mgcv "mgcv" "/usr/lib/R/library" "1.7-26"
nlme "nlme" "/usr/lib/R/library" "3.1-111"
nnet "nnet" "/usr/lib/R/library" "7.3-7"
parallel "parallel" "/usr/lib/R/library" "3.0.1"
rpart "rpart" "/usr/lib/R/library" "4.1-3"
spatial "spatial" "/usr/lib/R/library" "7.3-6"
splines "splines" "/usr/lib/R/library" "3.0.1"
stats "stats" "/usr/lib/R/library" "3.0.1"
stats4 "stats4" "/usr/lib/R/library" "3.0.1"
survival "survival" "/usr/lib/R/library" "2.37-4"
tcltk "tcltk" "/usr/lib/R/library" "3.0.1"
tools "tools" "/usr/lib/R/library" "3.0.1"
utils "utils" "/usr/lib/R/library" "3.0.1"
Priority
ks NA
misc3d NA
mvtnorm NA
rgl NA
base "base"
boot "recommended"
class "recommended"
cluster "recommended"
...
我需要提取安装包只是名称,所以无论是第一列还是第二列对我来说都足够了。
我使用np.loadtxt()
,np.genfromtxt()
和with open(rpack) as csvfile:
试过,但没有能够给回一个列表/数组,其中任一列或行被正确分离(他们都失败,不同的错误实际上)。
我怎样才能以列的形式读取这个输出,或者更多的问题,在列表/数组中提取已安装软件包的名称?
解释downvote的评论会非常好。 – Gabriel 2015-02-24 14:08:01
这不是我,但它可能与说你从这些尝试中得到的错误有关,并没有发布错误。这里的基本问题是,你试图'打开'这个'rpack'对象,就好像它是一个文件(或者实际上,打开一个'rpack'命名的文件)。这些错误应该已经很明显的出了什么问题。 – will 2015-02-24 14:11:31
谢谢你,我试图不让这个问题如此之大。下次我会发布_everything_。干杯。 – Gabriel 2015-02-24 14:14:16