【问题标题】:how to use na_rm with rpy2 rlf.tapply function如何将 na_rm 与 rpy2 rlf.tapply 函数一起使用
【发布时间】:2020-01-29 23:15:36
【问题描述】:

我正在使用 rpy2 在 Python 中运行一段 R 代码,并尝试使用 R 中的 tapply 功能,如下所示:

import rpy2.rlike.functional as rlf
import rpy2.robjects.packages as rpackages
minT = rlf.tapply(all_data['T'], list(date), min, na_rm=True)

但是,我收到此错误: TypeError: tapply() 得到了一个意外的关键字参数 'na_rm'

在 R 代码中它是 na.rm,我知道我需要切换“。”到 rpy2 中的“_”。我该如何解决这个错误?谢谢!

【问题讨论】:

    标签: r python-3.x na rpy2


    【解决方案1】:

    正如 R 函数一样,True 将是 TRUE 而不是 na_rm,而是 na.rm

    from rpy2.robjects.packages import importr
    import rpy2.robjects as rlf
    rlf.r('tapply(all_data$T, all_data$date,  FUN = min, na.rm=TRUE)')
    

    有一个可重现的例子

    >>> from rpy2.robjects.packages import importr
    >>> import rpy2.robjects as rlf
    >>> rlf.r('data(iris)')
    >>> rlf.r('out <- tapply(iris$Sepal.Width, iris$Species, FUN = min, na.rm = TRUE)')
    >>> rlf.r('out')
    #R object with classes: ('array',) mapped to:
    #[2.300000, 2.000000, 2.200000]
    

    【讨论】:

    • 我首先尝试过,但它给出了:minT = rlf.tapply(all_data['T'], list(date), min, na.rm=TRUE) ^ SyntaxError: keyword can't是一个表达式,其中 ^ 指向 na.rm 之前的空格
    • 谢谢。我能够重现您的示例,但它不适用于我的数据,因为我正在将我的 R 数据帧读入熊猫数据帧,因此将 R 函数应用于 python 对象。但我会记住这一点,以便将来使用更简单的 R 对象!
    【解决方案2】:

    您实际上是从 python 调用 min 函数。所以你正在使用的 rlf.tapply 实际上是在执行类似 R 的函数(例如 tapply ..)并在 python 对象中返回它们

    我们可以试试:

    import rpy2.rlike.functional as rlf 
    import rpy2.robjects.packages as rpackages
    import math    
    minT = rlf.tapply([float('nan'),1,2,3],[0]*2+[1]*2,min)
    # returns [(0, nan), (1, 2)]
    
    minT = rlf.tapply([float('nan'),1,2,3],[0]*2+[1]*2,
    lambda x:min([i for i in x if not math.isnan(i)]))
    #returns [(0, 1), (1, 2)]
    

    当你使用 R 中但 python 中没有的函数时,你可以清楚地看到这一点:

    rlf.tapply([0,1,2,3],[0]*2+[1]*2,median) 
    # returns error
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-14
      • 2013-02-10
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多