Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在purrr中将点传递给映射函数时,为什么需要引用unquote点?_R_Purrr_Tidyeval - Fatal编程技术网

在purrr中将点传递给映射函数时,为什么需要引用unquote点?

在purrr中将点传递给映射函数时,为什么需要引用unquote点?,r,purrr,tidyeval,R,Purrr,Tidyeval,据我所知,通常情况下,当圆点未被修改时,例如通过更改其名称,您不需要引用或取消引用圆点。然而,这个例子让我觉得我并不真正理解它是如何工作的 这里我们有一个函数,它依赖于点来选择要嵌套的列。它所做的只是从foo参数中添加一列,然后嵌套所有未在点中提及的列 图书馆管理员 圆点乐趣% mutatefoo=foo%>% nestdata=-c。。。 } 圆点(dots_funmtcars,a,cyl) >一个tibble:3x2 >共青团数据 > > 1 6

据我所知,通常情况下,当圆点未被修改时,例如通过更改其名称,您不需要引用或取消引用圆点。然而,这个例子让我觉得我并不真正理解它是如何工作的

这里我们有一个函数,它依赖于点来选择要嵌套的列。它所做的只是从foo参数中添加一列,然后嵌套所有未在点中提及的列

图书馆管理员 圆点乐趣% mutatefoo=foo%>% nestdata=-c。。。 } 圆点(dots_funmtcars,a,cyl) >一个tibble:3x2 >共青团数据 > > 1 6 > 2 4 > 3 8 我希望能够映射这个函数,通过使用不同的参数调用它。使用普通匿名函数语法进行此操作的简单方法失败,并出现令人困惑的错误:

列'a'不存在。 如果我只是将点移到匿名函数之外,也没有什么帮助。它不再出错,但无法按需要嵌套在cyl上

映射_fun2[[1]] >一个tibble:1x1 >资料 > > 1 > > [[2]] >一个tibble:1x1 >资料 > > 1 我通过将点拼接到匿名函数中成功地实现了它,但我真的不明白为什么这是必要的。您还可以通过颠倒映射函数的参数顺序并通过。。。当然是地图,但是dots_-fun的论点顺序是错误的。如果使用函数样式的匿名函数来反转参数顺序,则该函数无效

映射函数:3 x 2 >共青团数据 > > 1 6 > 2 4 > 3 8 > > [[2]] >一个tibble:3x2 >共青团数据 > > 1 6 > 2 4 > 3 8
我的问题是:在什么情况下你需要引用和取消引用。。。让它们安全地通过函数?那么这个条件在这里是如何应用的呢?

我想你的问题是你需要通过。。。通过每一级函数调用。所以。。。两者都必须通过地图以及你的内在功能

我无法让您的示例与nest一起使用,所以我制作了一个使用select的版本


我们通过了。。。虽然地图,通过我们的匿名功能,最后变成了点的乐趣。如果你在任何时候打破了这个链条,它就会崩溃。

你使用的是什么版本的tidyr?我在调用dots_funmtcars,a,cyl-cyl-not-found时出错。我使用了tidyr_1.0.2,我认为问题在于你需要通过映射和内部函数传递省略号:但我很难复制。回答不错。技术原因是。。。在lambda公式中,这种方式不起作用,因为它们将点用于另一个目的,所以您可以将参数称为..1,..2等。感谢您的澄清!现在它变得更有意义了
dots_fun <- function(df, foo, ...) {
  df %>%
    mutate(foo = foo) %>%
    select(...)
}
mapping_fun1 <- function(df, foos, ...) {
  map(
    .x = foos,
    .f = function(x, ...) dots_fun(df = df, foo = x, ...),
    ...
  )
}
mapping_fun1(mtcars, foos = list_of_foos, cyl, gear)