请问有人能够解释以下非标准评估和标准评估概念的区别吗?特别是,为什么一些方法可行而其他方法不可行。
我希望这将成为他人的指南(节省他们的时间)并且增强文档/小册子。此外,虽然我相信我对解释有一个相当好的掌握,但我肯定有人应该能够比我更优雅和全面地回答这个问题。
library(dplyr)
myCols <- c("Sepal.Width", "Sepal.Length")
#######################################################################
# Non-Standard Evaluation (NSE)
#######################################################################
# METHOD 1: Works as expected
select(iris, Sepal.Width, Sepal.Length)
# METHOD 2: Throws error - must reolve to integer column positions.
select(iris, myCols)
# METHOD 3: Works as expected
select(iris, one_of(myCols))
#######################################################################
# Standard Evaluation (SE)
#######################################################################
# METHOD 4: Returns just Sepal.Width NOT Sepal.Length
select_(iris, myCols)
# METHOD 5: Throws error - must reolve to integer column positions.
select_(iris, ~myCols)
# METHOD 6: Works as expected
select_(iris, .dots = myCols)
METHOD 5
抛出错误和METHOD 6
不抛出错误的原因。 - JasonAizkalns~myCols
的结果呢?你似乎假设它是某些东西,而实际上它并不是那样的,因为select
的文档已经很清楚地指出了select_
函数所期望的参数。 - Konrad Rudolphselect_(iris, ~match(names(iris), myCols, nomatch=0))
或者select_(iris, gsub('\"', '', deparse(myCols)))
。 - shadow