如何将 na_rm 与 rpy2 rlf.tapply 函数一起使用
how to use na_rm with rpy2 rlf.tapply function
我正在使用 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
函数,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]
您实际上是从 python 调用 min 函数。因此,您使用的 rlf.tapply 实际上是在执行类似 R 的函数(例如 tapply..)并将它们返回到 python object
我们可以试试:
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
我正在使用 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
函数,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]
您实际上是从 python 调用 min 函数。因此,您使用的 rlf.tapply 实际上是在执行类似 R 的函数(例如 tapply..)并将它们返回到 python object
我们可以试试:
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