我正在尝试创建一个函数,该函数根据函数的输入来选择列:
f <- function(string) {
quosure <- quo(!!sym(string))
dplyr::select(data, !!quosure)
}
temp <- f("id") # returns " Error in !quosure : invalid argument type"
奇怪的是,看起来非常相似的代码似乎起作用。
g <- function(string) {
quosure <- quo(!!sym(string))
dplyr::pull(data, !!quosure)
}
temp <- g("id") # Works fine
第一个功能和第二个功能有什么区别,这意味着第一个功能失败而第二个功能正常?
答案 0 :(得分:0)
使用dplyr版本“ 0.8.0.1”对我来说效果很好。
library(dplyr)
packageVersion("dplyr")
'0.8.0.1'
data <- data.frame(id= 1:10, othervariable= 11:20)
f <- function(string) {
quosure <- quo(!!sym(string))
dplyr::select(data, !!quosure)
}
temp <- f("id")
temp
id
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
如果您需要从一个数据帧中选择一个(多个)带有字符向量的列,我宁愿这样做
df <- data.frame(id= 1:10, othervariable= 11:20, x= 21:30)
f <- function(data, string) {
data[ , string]
}
temp <- f(data= df, string= c("id", "x"))
temp
id x
1 1 21
2 2 22
3 3 23
4 4 24
5 5 25
6 6 26
7 7 27
8 8 28
9 9 29
10 10 30