我正在尝试使用dplyr执行内部连接两个表,我想我会被非标准的评估规则绊倒.当使用by =("a"="b")参数时,当"a"和"b"是实际字符串时,一切都按预期工作.这是一个有效的玩具示例:
library(dplyr)
data(iris)
inner_join(iris, iris, by=c("Sepal.Length" = "Sepal.Width"))
Run Code Online (Sandbox Code Playgroud)
但是,让我说我将inner_join放在一个函数中:
library(dplyr)
data(iris)
myfn <- function(xname, yname) {
data(iris)
inner_join(iris, iris, by=c(xname = yname))
}
myfn("Sepal.Length", "Sepal.Width")
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
Error: cannot join on columns 'xname' x 'Sepal.Width': index out of bounds
我怀疑有一些花哨的表达,贬低,引用或不引用我可以做的工作,但我对这些细节有点模糊.
MrF*_*ick 31
您可以使用
myfn <- function(xname, yname) {
data(iris)
inner_join(iris, iris, by=setNames(yname, xname))
}
Run Code Online (Sandbox Code Playgroud)
?inner_join文档中的建议语法
by = c("a"="b") # same as by = c(a="b")
Run Code Online (Sandbox Code Playgroud)
有点误导,因为这两个值都不是正确的字符值.你实际上创建了一个命名的字符向量.动态设置等号左边的值与右边的值不同.您可以使用setNames()动态设置向量的名称.
| 归档时间: |
|
| 查看次数: |
13153 次 |
| 最近记录: |