33得票1回答
获取R函数的参数名称

对于任意一个函数f <- function(x, y = 3){ z <- x + y z^2 } 我希望能够获取f的参数名称。> argument_names(f) [1] "x" "y" 这是否可能?

29得票1回答
确定一个函数是否具有标准评估

有没有编程方式可以判断给定的r函数是否具有标准评估,如果不是,哪个组成部分的函数评估 - 解析、匹配、作用域、承诺形成、承诺实现、返回等 - 是非标准的?我知道闭包可能是标准的,原始函数可能是非标准的,但两者都有例外。我的问题是如何确定函数语义在这些方面是否符合标准,而不是函数机制是否符合标准...

20得票2回答
非标准评估的危险在哪里,如果有的话,是否有记录?

许多具有非标准评估的R函数,例如with,subset和transform,包含以下警告: 对于交互式使用,这非常有效且易于阅读。但是,在编程中,即在一个人的函数中,需要更加小心,通常应避免使用with(),因为数据中的变量可能会意外覆盖局部变量,请参见参考文献。(引用自with的文档,其他...

17得票1回答
deparse(substitute())通常返回函数名,但在for循环内调用时返回函数代码

在一个非常具体的情况下,R语言的行为让我有些惊讶。假设我定义了一个函数square,它返回其参数的平方,就像这样:square <- function(x) { return(x^2) } 我希望在另一个函数内调用此函数,并且在这样做时还要显示其名称。 我可以使用deparse(subs...

14得票3回答
如何替换已弃用的ggplot2函数aes_string:接受任意数量的命名字符串以指定美学映射? 如何替代已废弃的ggplot2函数 aes_string,以接受任意数量的命名字符串来指定美学映射?

aes_string 曾经有一些方便的行为,我在使用 ggplot2 进行编程时用到了它。但是自从ggplot2版本3.4.0以来,aes_string 已被弃用。我正在努力寻找如何很好地替换它。 具体而言,我之前创建了函数,通过省略号接受任意字符串参数,并通过 do.call 将其传递给 ...

12得票4回答
“在顶层无法使用 `!!!`”是什么意思,如何解决? (注意:这是一个提问标题,不需要回答问题。)

我正在尝试创建一个使用ggplot2创建棒棒糖图的函数。我想将所有参数传递到geom_point()中的aes()中,但是我想从传递到geom_segment()中的aes()中排除size参数(如果您查看下面a()的输出,很明显为什么)。因此,我使用rlang::enquos()捕获...,...

8得票1回答
弯曲的弯曲的整理评估和修改输入或其名称

本文介绍了新的整洁求值(tidy evaluation)方法,详见此文。文章举了几个例子,展示了这种非标准求值(NSE)风格的使用。 library(tidyverse) # Example 1 -------------------------- max_by <- functio...

8得票3回答
为什么 `substitute` 命令在多行工作,但单行无效?

我试图回答这个很好的问题,它涉及创建一个非标准的评估函数以对数据表对象进行分组汇总。Akrun提供了一个很棒的答案,我在此简化如下: akrun <- function(data, var, group){ var <- substitute(var) group <-...

7得票1回答
在dplyr::summarize()函数中设置向量属性会产生什么影响?

我最近遇到了一些奇怪的 dplyr 行为,其中 summarize 会不停地引用上一个组中的对象。 这里有一个简单的可重现示例来说明这种令人惊讶的行为: library(dplyr, warn.conflicts = FALSE) tibble(x = rep(letters[1:3], ...

7得票1回答
如何在一个包中使用rlang运算符?

我正在编写一个使用tidyverse函数的软件包,也就是使用非标准评估的函数,比如dplyr::filter: setMethod("filter_by_id", signature(x = "studies", id = "character"), ...