关于SO有很多相关的答案,但是它们都使用了^{robjects
接口。但是,如果我想使用底层接口,我该怎么做呢?下面是一个MCVE(如果您在R中安装了package ^{
import numpy as np
from rpy2 import rinterface as ri
ri.initr()
def rimport(packname):
as_environment = ri.baseenv['as.environment']
require = ri.baseenv['require']
require(ri.StrSexpVector([packname]),
quiet = ri.BoolSexpVector((True, )))
packname = ri.StrSexpVector(['package:' + str(packname)])
pack_env = as_environment(packname)
return pack_env
Copula = rimport('copula')
# The ri.SexpVector line causes the problem, but this is how the docs has it.
gc = Copula['gofCopula'](copula=Copula['gumbelCopula'](dim=5),
x=ri.SexpVector(np.random.randn(100,5), ri.REALSXP),
N=ri.IntSexpVector((1000,)),
simulation=ri.StrSexpVector(('mult',)))
死亡原因:
^{pr2}$
numpy2ri
,如所有关于SOimport numpy as np
from rpy2 import rinterface as ri
from rpy2.robjects import numpy2ri
ri.initr()
numpy2ri.activate()
def rimport(packname):
as_environment = ri.baseenv['as.environment']
require = ri.baseenv['require']
require(ri.StrSexpVector([packname]),
quiet = ri.BoolSexpVector((True, )))
packname = ri.StrSexpVector(['package:' + str(packname)])
pack_env = as_environment(packname)
return pack_env
Copula = rimport('copula')
# Automatic conversion does not happen!
gc = Copula['gofCopula'](copula=Copula['gumbelCopula'](dim=5),
x=np.random.randn(100,5), # Hoping for automatic conversion
N=ri.IntSexpVector((1000,)),
simulation=ri.StrSexpVector(('mult',)))
死亡原因:
ValueError Traceback (most recent call last)
<ipython-input-1-17b2b5105f01> in <module>()
24 x=np.random.randn(100,5),
25 N=ri.IntSexpVector((1000,)),
---> 26 simulation=ri.StrSexpVector(('mult',)))
27
28 gc
ValueError: All parameters must be of type Sexp_Type,or Python int/long, float, bool, or None
就像备选方案1一样死去。在
1)
list(ri.SexpVector(np.random.randn(100,5), ri.REALSXP))
是一个包含NA_real_
,正好100个的列表。在
2)
如果我抛弃了低级接口,只使用高级接口,一切都会正常工作。但这不是我要找的。在
import numpy as np
from rpy2.robjects.packages import importr
from rpy2.robjects import numpy2ri
numpy2ri.activate()
Copula = importr('copula')
gc = Copula.gofCopula(copula=partial(Copula.gumbelCopula, dim=5)(),
x=np.random.randn(100,5),
N=1000,
simulation='mult')
感谢您对高级界面和所做的工作的赞扬,尽管这是一种含蓄的评价:它确实是为了“工作”而设计的。在
这个底层接口非常接近R的C级API,它的使用可能需要更多的关于它的知识,而这些知识对于Python用户来说是合理的。请注意,由于未包含docstring(issue with readthedocs),发布的文档并不完整。在
我鼓励您使用高级接口,除非有特定的原因不使用,但是由于源代码是开放的,所以可以很容易地检查转换器中发生的事情(它是here)。在
相关问题 更多 >
编程相关推荐