如何向rpy2导入的R Surv函数传递非Python兼容参数?
解决rpy2调用Surv函数的参数传递问题
我来帮你搞定这个用rpy2调用R Survival包中Surv函数的参数传递问题~其实核心就是把R里的$取列和==0的向量比较,转换成rpy2里对应的操作就行,下面分两种常见场景给你演示:
场景1:你的数据已经是rpy2的R数据框对象
如果data_frame已经是rpy2中的robjects.DataFrame类型(比如从R环境导入,或者通过其他rpy2方法生成的),可以这样写:
from rpy2.robjects import importr # 导入survival包 survival = importr('survival') # 用rx2()对应R中的$操作,提取life列 life_col = data_frame.rx2('life') # 直接对R向量用==运算符,等价于R里的data_frame$survival==0 event_col = data_frame.rx2('survival') == 0 # 调用Surv函数,传入两个参数 surv_function = survival.Surv(life_col, event_col)
这里要注意:
rx2()是rpy2中专门用来模拟R的$或者[[索引的方法,用来安全提取数据框的列;- rpy2会自动把Python中的
==运算符映射到R的向量比较逻辑,生成的event_col就是和R中data_frame$survival==0完全一样的逻辑向量。
场景2:你的数据是Pandas DataFrame
如果你的原始数据是Python里的Pandas DataFrame,需要先转换成rpy2的R数据框,再操作:
import pandas as pd from rpy2.robjects import importr from rpy2.robjects import pandas2ri # 激活Pandas和rpy2的自动转换机制 pandas2ri.activate() survival = importr('survival') # 假设df是你的Pandas DataFrame r_data_frame = pandas2ri.py2rpy(df) # 后续操作和场景1一致 life_col = r_data_frame.rx2('life') event_col = r_data_frame.rx2('survival') == 0 surv_function = survival.Surv(life_col, event_col)
这样得到的surv_function就是R中Surv函数返回的生存分析对象,你可以在Python环境中直接用rpy2的相关方法继续处理它,比如提取生存时间、事件状态等。
内容的提问来源于stack exchange,提问作者namabuc
相关产品推荐
相关产品推荐

