作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Hadley 的 R4DS 书使用 tidyverse 和 purrr 进行循环,并且对波浪号 ~ 符号和句点符号的确切用法感到有些困惑。
因此,在编写 for 循环或使用 map() 时,您似乎可以使用波浪号代替 ~,而不是写出 function()。
这仅适用于 for 循环吗?
所以如下...
models <- mtcars %>%
split(.$cyl) %>%
map(~lm(mpg ~ wt, data = .))
此外,我被告知的句点可用于“引用
当前列表元素” .但我很困惑这意味着什么。这是否意味着,只有在循环时,句点才表示它指的是正在循环的列表中的元素?它与管道有什么不同?当您使用管道时,您正在将一行的结果通过管道传输到下一行代码。
x <- c(1:10)
detect(x, ~.x > 5)
使用检测功能,找到第一个匹配,我想我可以使用
detect(x, x >5)
但我收到一条错误消息,说 x >5 不是函数。所以我加了一个波浪号
detect(x, ~ x > 5)
并得到一个错误说它期望一个 TRUE 或 FALSE,而不是 10。所以如果你添加一个句点
detect(x, ~.x >5)
突然间它就像循环一样工作。那么 ~ 和 .在这里,如何。与简单的管道相比?
最佳答案
这个整体被称为tidyverse
非标准评估 (NSE)。你可能发现 ~
也是used in formulas表示左侧依赖于右侧。
在 tidyverse
NSE, ~
表示 function(...)
.因此,这两个表达式是等价的。
x %>% detect(function(...) ..1 > 5)
#[1] 6
x %>% detect(~.x > 5)
#[1] 6
~
自动将函数的每个参数分配给
.
;
.x
,
.y
;和
..1
,
..2
..3
特殊符号。请注意,只有第一个参数变为
.
.
map2(1, 2, function(x,y) x + y)
#[[1]]
#[1] 3
map2(1, 2, ~.x + .y)
#[[1]]
#[1] 3
map2(1, 2, ~..1 + ..2)
#[[1]]
#[1] 3
map2(1, 2, ~. + ..2)
#[[1]]
#[1] 3
map2(1, 2, ~. + .[2])
#[[1]]
#[1] NA
当有很多变量时,这种自动分配非常有用。
mtcars %>% pmap_dbl(~ ..1/..4)
# [1] 0.19090909 0.19090909 0.24516129 0.19454545 0.10685714 0.17238095 0.05836735 0.39354839 0.24000000 0.15609756
#[11] 0.14471545 0.09111111 0.09611111 0.08444444 0.05073171 0.04837209 0.06391304 0.49090909 0.58461538 0.52153846
#[21] 0.22164948 0.10333333 0.10133333 0.05428571 0.10971429 0.41363636 0.28571429 0.26902655 0.05984848 0.11257143
#[31] 0.04477612 0.19633028
但是除了我上面提到的所有特殊符号之外,参数也分配给了
...
.就像所有的 R 一样,
...
有点像一个命名的参数列表,所以你可以将它与
with
一起使用:
mtcars %>% pmap_dbl(~ with(list(...), mpg/hp))
# [1] 0.19090909 0.19090909 0.24516129 0.19454545 0.10685714 0.17238095 0.05836735 0.39354839 0.24000000 0.15609756
#[11] 0.14471545 0.09111111 0.09611111 0.08444444 0.05073171 0.04837209 0.06391304 0.49090909 0.58461538 0.52153846
#[21] 0.22164948 0.10333333 0.10133333 0.05428571 0.10971429 0.41363636 0.28571429 0.26902655 0.05984848 0.11257143
#[31] 0.04477612 0.19633028
另一种思考为什么会起作用的方法是因为
data.frame
s 只是一个
list
有一些行名:
a <- list(a = c(1,2), b = c("A","B"))
a
#$a
#[1] 1 2
#$b
#[1] "A" "B"
attr(a,"row.names") <- as.character(c(1,2))
class(a) <- "data.frame"
a
# a b
#1 1 A
#2 2 B
关于r - 在 R 中使用波浪号 (~) 和句号 (.),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62488162/
我目前正在开发一个具有模块化设计的网站,其中包含文本模块、图像模块、2 列模块......用户可以根据需要添加/删除/重新排序它们。 每个模块都有一个波浪形/flex 的边框: 有没有可能用css做这
我正在尝试在网站上创建波浪效果 like this其中有一个主色波(深紫色),然后是沿边缘的浅色波。我已尝试使用 CSS position 和 top 定位多个路径,但无法使它们工作。 这是我的基本波
如何在透明图像背景上构建波浪? 布局图像: 我需要白色顶部背景中的波浪。 最佳答案 我稍微改进了 akshay 的回答版本。这包括两个单独的选项。 选项 1 如果不需要保留宽高比,则曲线将随宽度变化。
我是一名优秀的程序员,十分优秀!