【问题标题】:Cast R objects into Python ones with rpy2使用 rpy2 将 R 对象转换为 Python 对象
【发布时间】:2011-04-13 16:58:18
【问题描述】:

问题:如何将 R 对象转换为 python 对象

我的情况:我需要将 cor.test() 的结果用于 python 例程。

correlation = robjects.r('function(x, y) cor.test(x, y)')
corr= correlation(robjects.IntVector(goodtotemp), robjects.IntVector(goodGDPs))
print corr

print corr[3]
print 'coef:',type(corr[3])

按预期输出:

     cor 
0.984881 
coef: <class 'rpy2.robjects.vectors.FloatVector'>

但是,我不能将 corr[3] 用作 python 对象,

c=corr[3]
print 'c:',c*10., type(c)

看(这是我如何知道我做错了什么!),输出:

c:
Traceback (most recent call last):
  File "./GDPAnalyzer.py", line 234, in <module>
    print 'c:',c*10., type(c)
TypeError: unsupported operand type(s) for *: 'FloatVector' and 'float'

感谢任何提示/帮助!

【问题讨论】:

  • 如错误消息中所述,您不能将FloatVectorfloat 相乘。尝试将 c 显式转换为 float - 像这样 - float(c)*10 看看它是否有效。
  • 那不是真的。做 :=> float(c)*10 给出:=> c:getsegcount 分段错误

标签: python r rpy2


【解决方案1】:

分段错误应该报告为 rpy2 错误。否则,请尝试:

c.ro * 3

或:

c[0] * 3

【讨论】:

    【解决方案2】:

    Python 确实不支持casting 的概念。确实,在某些有限的情况下,它确实会使用内置类型进行强制转换。

    但除此之外,程序员可以将对象从一种形式转换为另一种形式,或者创建某种形式的外观或 shim 对象,使 R 对象的行为类似于 Python。

    尝试print type(corr[3]) 查看正在使用的 Python 类型。它可能只是数字的字符串表示形式,在这种情况下,您可以使用eval() 将其转换为浮点数。

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 2017-06-28
      • 2019-09-02
      • 2020-09-19
      • 2022-01-12
      • 2011-03-11
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多