我有这个小函数,想使用 将它应用到数据集purrr::map()
。它按我的预期执行,但在输出后它还会打印一个 列表NULL
,这是我不想要的。我想了解为什么会发生这种情况以及如何抑制额外的输出。
toy <- data.frame(V1 = rnorm(10), V2 = rnorm(10))
varlabs <- data.frame(variable = c("V1", "V2"), label = c("Var 1", "Var 2"))
describe <- function(x) {
require(dplyr)
require(ggplot2)
lab <- filter(varlabs, variable == x) |> pull(label)
s <- summary(toy[, x])
cat("Describing variable", lab, "\n\n")
print(s)
cat("\n------------------------------\n")
}
purrr::map(names(toy), describe)
#> Loading required package: dplyr
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
#> Loading required package: ggplot2
#> Describing variable Var 1
#>
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> -0.9447 -0.3762 0.3521 0.2463 0.9040 1.3298
#>
#> ------------------------------
#> Describing variable Var 2
#>
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> -1.5429 -1.0039 -0.6099 -0.5736 -0.2366 0.4436
#>
#> ------------------------------
#> [[1]]
#> NULL
#>
#> [[2]]
#> NULL
创建于 2025-03-08,使用reprex v2.1.0
在 describe() 中,最后一个表达式是 cat("\n------------------------------\n"),它返回 NULL,因为 cat() 不可见地返回 NULL
你可以 1)使用 walk() 代替 map()
添加
invisible()
cat("\n------------------------------\n")
添加
return(s)
describe()您可以使用
walk()
,其map()
返回值被抑制invisible()
。这种情况并不常见。不过,我建议使用 vanilla R。