r - purrr::map中的第一个波浪号是什么意思

标签 r purrr tilde

我正在查看使用mapexample。这里是:

mtcars %>%
  split(.$cyl) %>% # from base R
  map(~ lm(mpg ~ wt, data = .))


map(~ lm...中的第一个波浪号是什么意思?也就是说,R如何解释第一个波浪号? (我知道第二个波浪号表示一个功能...)。询问的另一种方式是,为什么下面的方法不起作用?

mtcars %>%
  split(.$cyl) %>% # from base R
  map(lm(mpg ~ wt, data = .))

最佳答案

根据map help documentationmap需要一个函数,但它也接受公式,字符向量,数字向量或列表,后者被转换为函数。

R中的~运算符将创建公式。所以~ lm(mpg ~ wt, data = .)是一个公式。公式在R中很有用,因为它们会阻止立即评估符号。例如,您可以定义

x <- ~f(a+b)


无需在任何地方定义fab。在这种情况下,~ lm(mpg ~ wt, data = .)基本上是function(x) {lm(mpg ~ wt, data = x)}的快捷方式,因为map可以根据需要更改公式中.的值。

如果没有波浪号,lm(mpg ~ wt, data = .)只是R中的一个表达式或调用,将立即对其进行求值。 .不会在调用时定义,并且map不能将其转换为函数。

您可以使用map()函数将这些公式转换为purrr::as_mapper()之外的函数。例如

myfun <- as_mapper(~lm(mpg ~ wt, data = .))
myfun(mtcars)
# Call:
# lm(formula = mpg ~ wt, data = .)
# 
# Coefficients:
# (Intercept)           wt  
#      37.285       -5.344  

myfun
# <lambda>
# function (..., .x = ..1, .y = ..2, . = ..1) 
# lm(mpg ~ wt, data = .)
# attr(,"class")
# [1] "rlang_lambda_function"


您可以看到.如何成为传递给该函数的第一个参数。

关于r - purrr::map中的第一个波浪号是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834446/

相关文章:

r - 如何重复计算许多单列并将输出存储在 R 中的新数据框中?

r - 观星者产生各种 latex 错误

r - 如何在 R 中引导

r - 相当于 rowwise() do() 和 purrr,现在 by_row() 已被弃用?

latex - 使用 LaTeX 在 Python 中使用 LaTex "~"符号

r - 在 R 中发起 GET 请求

r - 如何在 purrr 中的多个数据集上拟合多个模型?

r - 在具有包含数据框的列表列的 tibble 中,如何使用自定义函数包装 mutate(foo = map2(...)) ?

linux - Shell脚本中波浪号 "~/<folder>"与〜/"<folder>"有什么不同

bash - 参数内的主目录扩展 (~)