无法使用 getFromNamespace() 获取扫帚包导出

Can't get broom package exports with getFromNamespace()

我有一个函数试图从 broom 包中获取特定的 'tidier'。但是,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?

如@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 创建

等等