在R中使用波浪符(~)和句点(.)

11 浏览
0 Comments

在R中使用波浪符(~)和句点(.)

我正在学习使用tidyverse和purrr进行循环处理,使用Hadley的R4DS书籍,对于波浪线~符号和句点符号的确切用法有些困惑。

所以在编写for循环或使用map()时,可以使用波浪线~代替写出function()。

这只适用于for循环吗?

所以如下所示...

models <- mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ wt, data = .))

此外,我被告知句点可以用于“引用当前列表元素”。但是我不明白这是什么意思。这是否意味着,只有在循环时,句点才表示正在循环的列表中的元素?它与管道有何不同?在使用管道时,将一行代码的结果传递到下一行。

所以在上面的示例中,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) 

突然之间它像循环一样工作。那么在这里,~和.的关系/用法是什么,.如何与简单的管道比较?

0
0 Comments

在R中,波浪号(~)和句点(.)的使用是为了使代码更简洁和易读。波浪号(~)在tidyverse中的非标准评估(NSE)中被用作函数的表示。它自动将每个参数分配给特殊符号.x.y..1..2..3。句点(.)在函数内部表示当前参数的值。

使用波浪号(~)和句点(.)可以使代码更简洁,尤其在有多个变量时。它们可以用于各种函数,例如mappmap。在map中,句点(.)表示当前参数的值,而在pmap中,特殊符号..1表示第一列的值。

然而,需要注意的是,map只能接受一个列表或向量作为参数,而不能使用map(mtcars, 1, 2, ~ )这种方式。在这种情况下,你可以使用pmap

总之,使用波浪号(~)和句点(.)可以使代码更简洁和易读,特殊符号.x.y..1..2..3可以帮助我们快速引用参数的值。

0