函数参数中波浪号的解释

Explanation of tilde in function arguments

我试图了解如何使用 plotly 绘制累积线动画。来自 "Plotly R Open Source Graphing Library" 的代码如下:

library(plotly)

accumulate_by <- function(dat, var) {
  var <- lazyeval::f_eval(var, dat)
  lvls <- plotly:::getLevels(var)
  dats <- lapply(seq_along(lvls), function(x) {
    cbind(dat[var %in% lvls[seq(1, x)], ], frame = lvls[[x]])
  })
  dplyr::bind_rows(dats)
}

df <- txhousing 
fig <- df %>%
  filter(year > 2005, city %in% c("Abilene", "Bay Area"))
fig <- fig %>% accumulate_by(~date)
  1. 主要问题是解释当我们通过 ~dateaccumulate_by 函数。哪些值 datvar变量会得到吗?它是如何工作的?
  2. 如果我理解 vardat 变量取什么值,那么 f_eval 函数的作用就很清楚了,但现在我不明白这一点。
  3. 什么是 plotly:::getLevels?我的意思是,我没有找到关于此功能的任何文档。
  1. 主要问题是解释当我们通过 ~date 时会发生什么 到 accumulate_by 函数。哪些值 dat 和 var 变量 会得到吗?它是如何工作的?

    accumulate_by 将按照 datvar 的顺序传递给它的任何值。这意味着如果您传递 accumulate_by(Var1, Var2) 这与 accumulate_by(dat = Var1, var = Var2) 相同。这称为位置匹配。

    正如代码所写,fig 是您的 dat 变量,因为它在第一个位置通过管道 (%>%) 进入 accumulate_by~date 是你的 var 变量,因为它在第二个位置。

    日期前面的~表示"by",所以"by date".

    accummlate_by 实际上在做的是收集具有给定日期值的所有行和所有变量到一个名为 level 的新变量中。然后它前进到下一个日期值并收集该日期的所有行和变量,加上日期的所有先前值的所有行和变量,并为 level 提供另一个值。您可以在应用 accumulate_by 之前和之后检查 str(fig) 以查看 fig 变得更长(更多行)并在应用 accumulate_by 之后获得另一个名为 level 的变量.

  2. 如果我理解 var 和 dat 变量取什么值,它 变得清楚 f_eval 函数的作用,但现在我不知道 明白这一点。

    在问题 1 的回答中(我希望)已解决。

  3. plotly:::getLevels 是什么?我的意思是,我没有找到任何文档 关于这个功能。

    三个冒号表示 "search entire package (in this case the package is plotly) including non-exported items in the package"。 这实际上意味着许多软件包具有 "helper" 最终用户通常不使用的功能和其他实用程序。相反,这些辅助函数由包中的其他函数使用。辅助函数不是 "exported",也就是说,通常只需输入它们的名称即可使用。不过,可以使用 ::: 三重冒号访问它们。

    因为 getLevels 并不是真正打算供 plotly 包用户使用,所以可能没有记录。