首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr .data代词与"quosure“方法的比较

dplyr .data代词与"quosure“方法的比较
EN

Stack Overflow用户
提问于 2018-04-04 12:38:39
回答 1查看 788关注 0票数 5

dplyr v0.7.0中,引入了.data代词,允许我们引用带有字符串的变量。我只是好奇这种方法是否比“质量”方法更可取。例如,这里有一种使用.data代词的方法:

代码语言:javascript
复制
varname <- "gear"
data_pronoun_method_df <- dplyr::mutate(mtcars, new_col = .data[[varname]] + 2)

这与使用quosure方法的示例进行了比较:

代码语言:javascript
复制
quo_varname <- rlang::quo(gear)
quo_method_df <- dplyr::mutate(mtcars, new_col = !! quo_varname + 2)

这两种方法产生相同的输出:

代码语言:javascript
复制
data_pronoun_method_df

# mpg cyl  disp  hp drat    wt  qsec vs am gear carb new_col
# 1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4       6
# 2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4       6
# 3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1       6
# 4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1       5
# 5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2       5
# 6  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1       5
# 7  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4       5
# 8  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2       6
# [ reached getOption("max.print") -- omitted 24 rows ]

all.equal(data_pronoun_method_df, quo_method_df)
# [1] TRUE

有什么真正的区别吗?这两种方法的优缺点是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 12:52:16

.data代词可以用来解决NSE问题,但它或多或少是正交的。它的主要目的是确保变量在数据帧中被查找。如果它不存在,您将得到一个错误。这与如果定义本地对象时可以提取本地对象的赤裸裸的名称形成了对比:

代码语言:javascript
复制
other <- 1e10
transmute(mtcars, 2 * other)            # Succeeds erroneously
transmute(mtcars, 2 * .data[["other"]]  # Fails

使用.data代词比显式引用数据框架更可靠,因为数据可能被分组:

代码语言:javascript
复制
group_by(mtcars, cyl) %>%
  transmute(2L * .data[["am"]])

在该示例中,.data[["am"]]表示由cyl级别定义的am列的切片。

编辑:为了完整性,您可以使用商和准引号完成相同的任务。如果以空env为环境创建符号的质量,则只有在数据帧包含这样的列时,符号查找才会成功:

代码语言:javascript
复制
other <- 1e10
quo <- new_quosure(quote(other), empty_env())
transmute(mtcars, 2L * !!quo)  # Fails
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49651253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档