r - R 中的波浪号 (~.)
问题描述
谁能解释R中的波浪号(〜。)?我已经看过一些关于它的帖子。我知道波浪号用于公式,指定自变量和因变量。而且,我知道该点用于表示所有其他变量。更具体地说,有人可以解释这个例子中的波浪号吗?
x <- sample(10)
x %>%
detect(~. > 5)
谢谢
解决方案
正如 MrFlick 指出的那样,这是两个独立的运营商。它们一起提供了一种特殊的机制,允许 tidyverse 包动态构建lambda 函数。这在 中得到了最好的描述?purrr::as_mapper
。具体来说,
如果是公式,例如 ~ .x + 2,则将其转换为函数。引用参数的方式有以下三种:
对于单参数函数,使用 .
对于两个参数函数,使用 .x 和 .y
如需更多参数,请使用 ..1、..2、..3 等
使用您的示例:
purrr::as_mapper( ~. > 5 )
# <lambda>
# function (..., .x = ..1, .y = ..2, . = ..1)
# . > 5
# attr(,"class")
# [1] "rlang_lambda_function"
创建一个函数,该函数返回一个逻辑值,指示函数的参数是否大于 5。purrr::detect()
在内部生成此函数,然后使用它遍历输入向量x
。最终结果是x
满足“大于 5”约束的第一个元素。
正如 Konrad 所指出的,这种机制是 tidyverse 特有的,一般情况下不起作用。在 tidyverse 之外,此语法的行为在相关问题中进行了解释。
推荐阅读
- java - 程序没有接受用户的输入
- java - java参数的替代方法是什么:(Region.Op.REPLACE)在android 9及更高版本中
- python - 使用 Python 对 Excel 中的值进行排序和更改
- php - Mezzio 应用程序在内置 php 服务器上运行良好,但在 docker 容器中运行时出错
- r - 无法正确执行 stl 分解
- javascript - 使用车把而不是 wokring 将对象数组传递到 expressjs 中的部分视图
- spring - 控制器、服务和存储库返回的对象如何命名?
- rust - 如何在 Rust 中为结构实现 Rng 和 RngCore?
- python - 是否可以矢量化 scipy.optimize.fminbound?
- ros - ROS:tf 与 RPlidar