r - 当列作为字符对象输入时,如何使用 tidyverse select?
问题描述
我正在尝试创建一个函数,该函数根据函数的输入选择列:
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
第一个功能和第二个功能有什么区别,这意味着第一个功能失败而第二个功能有效?
解决方案
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
推荐阅读
- manim - 类型对象“动画”没有属性“mobject”
- html - 可以以角度路由到不同的模板
- c - 为什么我可以用没有类型的“静态”限定符声明一个变量?(在 C 中)
- java - 我可以在枚举内的值之间映射吗?
- php - 如何在 PHP 中裁剪图像并以 PNG 格式返回?
- python - python代码仍在运行时如何释放内存?
- javascript - 为什么多次调用一个动画函数会导致它跳过三个js中的动画?
- php - 为代码“DateTime::createFromFormat”的 foreach () 提供的参数无效?
- c++ - 如何使用 Rcpp 将 R 对象交给 C++?
- r - 使用 R 在 Yahoo Finance 上查找 Xpath