修改 R 包源码

吴诗涛 2022-10-07 [R]

最近活跃在张敬信老师的 QQ 群答疑,遇到一个需要修改 R 包源码的问题,记录在此。

问题重现

library(rstatix)
rstatix::cor_test(iris, Sepal.Length, Petal.Length)
#> # A tibble: 1 × 8
#>   var1         var2           cor statistic        p conf.low conf.high method 
#>   <chr>        <chr>        <dbl>     <dbl>    <dbl>    <dbl>     <dbl> <chr>  
#> 1 Sepal.Length Petal.Length  0.87      21.6 1.04e-47    0.827     0.906 Pearson

输出结果中 cor 只保留两位小数,而有时候我们需要更多位数。通过查看 rstatix 包函数源码发现:作者在源码中直接设置了保留 2 位,且没有办法通过传参修改位数。

为此需要通过修改 as_tidy_cor() 函数的源码。

修改源码

最快捷的方法是利用 trace() 直接编辑源代码后保存:

library(rstatix)
trace(rstatix:::as_tidy_cor, edit = T) # 修改后保存
#> Tracing function "as_tidy_cor" in package "rstatix (not-exported)"
#> [1] "as_tidy_cor"

再次调用该函数,可以看到效果:

rstatix::cor_test(iris, Sepal.Length, Petal.Length) # 输出结果变成 4 位(这里因控制台输出会变成 3 位,实际是 4 位)
#> # A tibble: 1 × 8
#>   var1         var2           cor statistic        p conf.low conf.high method 
#>   <chr>        <chr>        <dbl>     <dbl>    <dbl>    <dbl>     <dbl> <chr>  
#> 1 Sepal.Length Petal.Length  0.87      21.6 1.04e-47    0.827     0.906 Pearson

注意:这种方法是临时性的,仅当次使用有效。如果要永久修改,我的想法是复制整个 rstatix 包源码,修改源码后在本地调用。

收获