如何捕获函数的参数并按原样在另一个函数中应用它们 context/environment
How do I capture the argument to a function and apply them as is in another context/environment
我很确定我的语言不够精确,但我还不知道正确的术语。这就是我想要实现的目标:
我有一个函数abc2
。我想获取用户提供的参数(无需评估或更改参数),以在另一个函数中使用。例如
abc2 <- function(...) {
# what do I have to do here?
}
adf = data.frame(a = 1:3, b = 1:3)
bdf = data.frame(a = 11:13, b = 11:33)
调用 abc2(a)
与调用
相同
dplyr::select(adf, a)
dplyr::select(bdf, a)
并且调用 abc2("a")
与调用
相同
dplyr::select(adf, "a")
dplyr::select(bdf, "a")
基本上,我想从 abc2 移植 ...
并在不改变用户输入方式的情况下应用它们并在其他地方应用。
欢迎使用 Base R 和 tidyeval 解释!我正在尝试阅读 quo
和 enquo
,但我似乎无法理解它。
1) base R传...
上。可以使用 "a"
或仅使用 a
。这里的传递机制只使用base R。dplyr只是为了我们可以使用select
.
library(dplyr)
adf = data.frame(a = 1:3, b = 1:3)
bdf = data.frame(a = 11:13, b = 21:23)
abc2 <- function(...) {
print(select(adf, ...))
print(select(bdf, ...))
}
# or: abc2(a)
abc2("a")
给予:
a
1 1
2 2
3 3
a
1 11
2 12
3 13
2) rlang 这也行,但这次我们使用 rlang 的 enquos 和 !!!使用 tidyeval,所有这些都由 dplyr 拉入。
abc2a <- function(...) {
dots <- enquos(...)
print(select(adf, !!!dots))
print(select(bdf, !!!dots))
}
abc2(a)
我很确定我的语言不够精确,但我还不知道正确的术语。这就是我想要实现的目标:
我有一个函数abc2
。我想获取用户提供的参数(无需评估或更改参数),以在另一个函数中使用。例如
abc2 <- function(...) {
# what do I have to do here?
}
adf = data.frame(a = 1:3, b = 1:3)
bdf = data.frame(a = 11:13, b = 11:33)
调用 abc2(a)
与调用
dplyr::select(adf, a)
dplyr::select(bdf, a)
并且调用 abc2("a")
与调用
dplyr::select(adf, "a")
dplyr::select(bdf, "a")
基本上,我想从 abc2 移植 ...
并在不改变用户输入方式的情况下应用它们并在其他地方应用。
欢迎使用 Base R 和 tidyeval 解释!我正在尝试阅读 quo
和 enquo
,但我似乎无法理解它。
1) base R传...
上。可以使用 "a"
或仅使用 a
。这里的传递机制只使用base R。dplyr只是为了我们可以使用select
.
library(dplyr)
adf = data.frame(a = 1:3, b = 1:3)
bdf = data.frame(a = 11:13, b = 21:23)
abc2 <- function(...) {
print(select(adf, ...))
print(select(bdf, ...))
}
# or: abc2(a)
abc2("a")
给予:
a
1 1
2 2
3 3
a
1 11
2 12
3 13
2) rlang 这也行,但这次我们使用 rlang 的 enquos 和 !!!使用 tidyeval,所有这些都由 dplyr 拉入。
abc2a <- function(...) {
dots <- enquos(...)
print(select(adf, !!!dots))
print(select(bdf, !!!dots))
}
abc2(a)