19得票3回答
dplyr::select()如何选择可能不存在于数据框中的变量?

我有一个辅助函数(比如说foo()),将在各种数据框上运行,这些数据框可能包含特定的变量,也可能不包含。假设我有library(dplyr) d1 <- data_frame(taxon=1,model=2,z=3) d2 <- data_frame(taxon=2,pss=4,z...

13得票3回答
在 mutate 的右侧使用基于 tidyeval 的非标准评估来重新编码

考虑一个数据框,其中每一列都是一个字符向量,可以取多个值 -- 假设为"A"到"F"。 library(tidyverse) sample_df <- tibble(q1 = c("A", "B", "C"), q2 = c("B", "B", "A")) 我希望创建一个函数,以列名作...

19得票1回答
rlang::sym在匿名函数中的使用

我最近注意到rlang::sym在匿名函数中似乎不起作用,但我不明白为什么。这里是一个例子,它相当笨拙和丑陋,但我认为它说明了问题。 require(tidyverse) data <- tibble(x1 = letters[1:3], x2 = let...

30得票4回答
如何使用动态名称和dplyr重命名变量?

我希望在一个函数内使用传递为参数的名称来重命名列。基本上,我有一个函数。produce_data_frame <- function(name) { return(iris) } 我希望这个函数可以将Sepal.length列的名称更改为“name”(其中“name”取决于变量名)。...

28得票4回答
dplyr:按位置选择列的非标准评估(NSE)

我正在尝试创建一个函数,它会根据列的位置选择DF中的列。我总是需要第一列,然后是DF的子集。每个需要选择的子集都有一个对象。 到目前为止,我尝试过以下方法:position <- "1,28:31" DF %>% select_(.dots = position) 但是我收到...

15得票2回答
为什么将!!(双感叹号)与as.name()结合使用会产生与单独使用!!或as.name()不同的输出?

我使用动态变量(例如ID)作为引用列名称的方式,这取决于我正在处理哪个基因。然后我使用mutate中的case_when创建一个新列,该列将具有依赖于动态列的值。 我以为!!(叹号叹号)是我需要强制评估变量内容的方法;但是,我的新列没有得到预期的输出。只有!!as.name给了我预期的输出,而...

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

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

7得票1回答
如何使用dplyr和省略号(dots elipse)编写嵌套函数?

我试图尽可能简单地表达这个意思。 一些样本数据: library(magrittr) library(dplyr) library(rlang) # sample data tib <- tibble( a = 1:3, b = 4:6, c = 7:9 ) 现在有...

37得票4回答
为什么在R语言中要优先使用enquo() + !!,而不是substitute() + eval()?

在下面的示例中,为什么我们应该更喜欢使用f1而不是f2?在某种意义上,它是否更有效率?对于习惯于基础R的人来说,使用“substitute + eval”选项似乎更自然。 为什么我们应该更喜欢使用f1而不是f2?在某种意义上,它是否更有效率?对于习惯于基础R的人来说,使用“substitu...

9得票1回答
了解在函数中何时使用ensym、sym和enquo

我正在努力理解quo/unquo语法的不同之处,以及何时应该使用每种语法。 我主要编写将数据框和列作为参数传递的函数--使用ggplot绘图或使用dplyr(group_by、summarize、mutate等)进行汇总/操作数据。 但是,偶尔我也必须在我的整体函数中使用不使用NSE的函数。...