Reputation: 297
I'm using Rpy2 on windows 7 64 and having trouble loading a package:
using(mi)
from rpy2.robjects.packages import importr
mi=importr('mi')
---------------------------------------------------------------------------
RRuntimeError Traceback (most recent call last)
<ipython-input-30-2d393a6df544> in <module>()
----> 1 mi=importr('mi')
C:\Anaconda\lib\site-packages\rpy2\robjects\packages.pyc in importr(name, lib_loc, robject_translations, signature_translation, suppress_messages, on_conflict, data)
397 if _package_has_namespace(rname,
398 _system_file(package = rname)):
--> 399 env = _get_namespace(rname)
400 version = _get_namespace_version(rname)[0]
401 exported_names = set(_get_namespace_exports(rname))
RRuntimeError: Error in loadNamespace(name) : there is no package called 'm
Any suggestions?
Upvotes: 12
Views: 16856
Reputation: 21
I think the lib_loc
option is the best in most circumstances.
However, I found myself in a situation where in a conda environment on RHEL I needed to be able to access a number of custom-made R packages in system libraries from within python using rpy2. This required setting the .libPaths
, which I was able to do with this code:
# Get original libPaths from R as python list:
orig_libs = list(base._libPaths())
new_libs = ['/usr/lib64/R/library','/usr/share/R/library']
# Add new libs to original libPaths:
new_libs.extend(orig_libs)
# Create an R object string vector:
libs = robjects.StrVector(new_libs)
# If you want to check how it will look to R:
#print(libs.r_repr())
# Set with .libPaths:
base._libPaths(libs)
In order to get this to work, I also had to set the R_LIBS_SITE environment variable in R:
base.Sys_setenv(R_LIBS_SITE="/usr/lib64/R/library:/usr/share/R/library")
Note that it appears libPaths()
in R doesn't just paste in a text line, rather it tries to be smart and does some kind of checks on the library location and won't include them if the libraries are no good. This caused me some confusion while troubleshooting.
Upvotes: 0
Reputation: 65
I had a similar problem. I had to uninstall R and reinstall it with admin rights, then reinstall the R package while running R with admin rights, so it would install to the standard library location (not a personal library). Then add R to the PATH variable, and reinstall rpy2.
Upvotes: 0
Reputation: 41
In python: Check the version of R being used by rpy2
import rpy2.robjects as robjects
robjects.r['version']
Check your rpy2 library location
base = importr('base')
print(base._libPaths())
In R: Check your R library location for this version of r
.libPaths()
copy the library installed in your version of r to the folder used by rpy2.
Upvotes: 3
Reputation: 51
I also have this problem,and i copy the package i need to base._libPaths() ,here , and it works.
import rpy2.robjects as objects
from rpy2.robjects.packages import importer
base = importr('base')
base._libPaths()[0]
Upvotes: 0
Reputation: 181
For me, in importr, the argument lib_loc inside it worked, putting the first path that appears in the output of .libPaths() in R, like:
importr('name package', lib_loc="/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4")
,
where the path is the path in the output example of the @Nbarjest answer.
Upvotes: 5
Reputation: 761
I had a similar problem:
rpy2.rinterface.RRuntimeError: Error in loadNamespace(name) : there is no package called speedglm
I noticed that the issue is that rpy2 does not know the location of all R libraries. In my case, typing (in R)
.libPaths()
gave me
[1] "/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4"
[2] "/usr/lib64/R/library"
[3] "/usr/share/R/library"
While, typing (in Python 3)
import rpy2.rinterface
rpy2.rinterface.set_initoptions((b'rpy2', b'--no-save', b'--no-restore', b'--quiet'))
from rpy2.robjects.packages import importr
base = importr('base')
print(base._libPaths())
gave me only
[1] "/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4"
I couldn't find a way to append the other two paths to base._libpath(). If you find a way to do it, please let me know. I used another workaround:
import rpy2
import rpy2.robjects as RObjects
from rpy2.robjects.packages import importr
utils = importr("utils")
d = {'print.me': 'print_dot_me', 'print_me': 'print_uscore_me'}
try:
thatpackage = importr('speedglm', robject_translations = d, lib_loc = "/home/nbarjest/R/x86_64-redhat-linux-gnu-library/3.4")
except:
try:
thatpackage = importr('speedglm', robject_translations = d, lib_loc = "/usr/lib64/R/library")
except:
thatpackage = importr('speedglm', robject_translations = d, lib_loc = "/usr/share/R/library")
This works. I hope other people who have the same problem find this useful.
Upvotes: 13
Reputation: 11545
This is was cross-posted, and answered, on the issue tracker for rpy2: https://bitbucket.org/rpy2/rpy2/issue/265/windows-error-in-loadnamespace
Upvotes: -2