我正在使用Hadley的R4DS书籍学习tidyverse和purrr中的循环,并且对于波浪号~符号和句点符号的确切使用有些困惑。
因此,在编写for循环或使用map()时,您似乎可以使用波浪线符号~代替function()。
这只适用于for循环吗?
如下所示...
models <- mtcars %>%
split(.$cyl) %>%
map(~lm(mpg ~ wt, data = .))
此外,我被告知可以使用“period i”来指代当前列表元素。但我不确定这是什么意思。这是不是只有在循环时,“period i”才表示它指的是正在循环的列表中的元素?这与管道有何不同?当您使用管道时,您将一行代码的结果传输到下一行代码中。
因此,在上面的例子中,mtcars被输入到split()函数的第二行,但是使用了一个点。为什么?
下面的例子总结了我的困惑:
x <- c(1:10)
detect(x, ~.x > 5)
使用detect函数可以找到第一个匹配项,我认为我只需要使用
detect(x, x >5)
但是我收到一个错误,说x>5不是一个函数。所以我添加了一个波浪符。
detect(x, ~ x > 5)
你会得到一个错误,说它期望一个单独的TRUE或FALSE,而不是10。因此,如果你添加一个句号
detect(x, ~.x >5)
突然之间它像是循环一样工作了。那么这里的 ~ 和 . 有什么关系/用法,以及点号与简单管道符 | 相比如何?
.x
和.
之间的区别 - Henrik