使用rpy2从Python捕获R库中的警告消息

2024-09-28 23:18:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在R中捕获警告消息,并在Python中作为字符串存储。我的问题是从熊猫数据框中的疾病样本数据开始的,如下所示:

dates = ["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05",
         "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-10"]

cases = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]

df = pd.DataFrame({"dates": dates, "cases": cases}) 

为了估计这种疾病的繁殖数量,我将熊猫数据帧保存到一个csv文件中,然后使用名为EpiEstim的R库。我的R代码是这样的

library(EpiEstim)
disease <- read.csv(file="df.csv")
res_parametric_si <- estimate_R(disease$cases, 
                                method="parametric_si",
                                config=make_config(list(mean_si=5, std_si=1)))

因为每天的病例数量非常少。EpiEstim发出如下警告消息:

Default config will estimate R on weekly sliding windows.
    To change this change the t_start and t_end arguments. 
Warning message:
In estimate_R_func(incid = incid, method = method, si_sample = si_sample,  :
  You're estimating R too

因为我的数据管道是Python环境,所以我使用rpy2从Python调用了EpiEstim。我的代码看起来像这样

import pandas as pd
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri

pandas2ri.activate()

dates = ["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05",
         "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-10"]

cases = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]

df = pd.DataFrame({"dates": dates, "cases": cases})

eps = importr("EpiEstim")
rdf = pandas2ri.py2ri(df)
results = eps.estimate_R(rdf[1], method="parametric_si", config=eps.make_config(mean_si=5, std_si=1))
results = dict(results.items())
rhat = pandas2ri.ri2py(results["R"])

除了无法捕获在R环境中发生的警告消息外,其他一切都正常工作。你能给我一些解决这个问题的建议吗?我真的需要捕捉这样的警告信息。多谢各位


Tags: csv数据config消息警告dfresultsmethod