【问题标题】:Can't get broom package exports with getFromNamespace()无法使用 getFromNamespace() 获取扫帚包导出
【发布时间】:2021-12-17 22:37:59
【问题描述】:

我有一个函数试图从扫帚包中获取特定的“整洁”。但是,getFromNamespace 找不到它们。考虑下面的代表:

f <- function(tidier = c("tidy", "glance", "augment")) {
  tidier_func <- match.arg(tidier)
  tidier_func <- utils::getFromNamespace(tidier_func, "broom")
  tidier_func(lm(mpg ~ wt, data = mtcars))
}

f("tidy")
#> Error in get(x, envir = ns, inherits = FALSE): object 'tidy' not found

reprex package (v0.3.0) 于 2021 年 12 月 17 日创建

此错误是否与 broom 的 modelgenerics 分支有关? S3?

【问题讨论】:

  • 如果你特别要求 lm 对象的整洁,看起来它似乎可以工作,例如在更改 tidier 选项后f("tidy.lm")。取决于你在做什么,也许这是一种解决方法?
  • @aosmith 对我有用,谢谢!

标签: r broom


【解决方案1】:

正如@aosmith 提到的,您必须指定泛型。

对于 lm:

f <- function(tidier = c("tidy", "glance", "augment")) {
  tidier_func <- paste0(match.arg(tidier), ".lm")
  tidier_func <- utils::getFromNamespace(tidier_func, "broom")
  tidier_func(lm(mpg ~ wt, data = mtcars))
}

f("tidy")
#> # A tibble: 2 x 5
#>   term        estimate std.error statistic  p.value
#>   <chr>          <dbl>     <dbl>     <dbl>    <dbl>
#> 1 (Intercept)    37.3      1.88      19.9  8.24e-19
#> 2 wt             -5.34     0.559     -9.56 1.29e-10

reprex package (v0.3.0) 于 2021 年 12 月 17 日创建

对于 chisq.test:

fchisq <- function(tidier = c("tidy", "glance", "augment")) {
  tidier_func <- paste0(match.arg(tidier), ".htest")
  tidier_func <- utils::getFromNamespace(tidier_func, "broom")
  x <- chisq.test(c(A = 20, B = 15, C = 25))
  tidier_func(x)
}

fchisq("glance")
#> # A tibble: 1 x 4
#>   statistic p.value parameter method                                  
#>       <dbl>   <dbl>     <dbl> <chr>                                   
#> 1       2.5   0.287         2 Chi-squared test for given probabilities

reprex package (v0.3.0) 于 2021 年 12 月 17 日创建

等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2020-10-05
    • 2021-11-08
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多