“tidyselect”包提供了一个选择帮助函数where
。where
用于选择具有自定义功能的数据框列。它是“tidyselect”的一个内部函数。这意味着where
不会加载到您的命名空间,您只能通过tidyselect:::where
.
但是,我从dplyr 小插图中看到了以下示例: columnwise operations 。
starwars %>%
summarise(across(where(is.character), ~ length(unique(.x))))
#> # A tibble: 1 x 8
#> name hair_color skin_color eye_color sex gender homeworld species
#> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 87 13 31 15 5 3 49 38
在这个例子中,where
没有前缀“tidyselect:::”,但很明显,代码中没有错误,它产生了有意义的结果。这对我来说似乎很奇怪。我想知道为什么代码正常运行。
我想这是由于“代码引用”,这是 tidyeval 方法的一部分。粗略地说,代码引用将代码作为表达式挂起,然后在“内部环境”中评估表达式。这只是一个直观的猜测,我不知道如何测试它。
我希望有人可以帮助我解决“哪里”问题,或者为我留下一些关于代码如何运行的参考。