如何使用带rpy2 rlf.tapply功能的na_rm

如何使用带rpy2 rlf.tapply功能的na_rm,r,python-3.x,na,rpy2,R,Python 3.x,Na,Rpy2,我使用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在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中将“.”切换到“uu”。如何解决此错误?谢谢

作为一个
R
函数,
True
将是
True
,而不是
na\u 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]
>>从rpy2.robjects.packages导入导入
>>>将rpy2.robjects作为rlf导入
>>>rlf.r(‘数据(iris)’)

>>>rlf.r('out是一个
r
函数,
True
将是
True
,而不是
na\u 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]
>>从rpy2.robjects.packages导入导入
>>>将rpy2.robjects作为rlf导入
>>>rlf.r(‘数据(iris)’)

>>>rlf.r('out您实际上是在从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

实际上,您是在从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

我先尝试了一下,但它给出了:minT=rlf.tapply(all_data['T'],list(date),min,na.rm=TRUE)^SyntaxError:关键字不能是表达式,^指向na前面的空格。谢谢。我可以复制您的示例,但它不适用于我的数据,因为我正在将我的R数据帧读入pandas数据帧,因此应用R函数to python对象。但我会记住这一点,以便将来使用更简单的R对象!我首先尝试了这一点,但它给出了:minT=rlf.tapply(all_data['T'],list(date),min,na.rm=TRUE)^SyntaxError:关键字不能是表达式,^指向na前面的空格。谢谢。我可以复制您的示例,但它不适用于我的数据,因为我正在将我的R数据帧读入pandas数据帧,因此应用R函数to python对象。但我会记住这一点,以便将来使用更简单的R对象!