用dplyr写T而不是TRUE
由于懒惰,我经常用缩写用dplyr写T而不是TRUE,r,dplyr,R,Dplyr,由于懒惰,我经常用缩写T表示TRUE。在这里,我观察到dplyr的一种奇怪行为,它并不总是被接受 此示例崩溃(`na.rm``参数的值不兼容): 但这些例子是有效的: mutate(df, n = n_distinct(Species, na.rm=TRUE)) df$n = n_distinct(df$Species, na.rm=T) mutate(df, m = mean(Sepal.Length, na.rm=T)) 当然,这里的简单修复方法是避免缩写和键入TRUE。但这也不起作用:
T
表示TRUE
。在这里,我观察到dplyr的一种奇怪行为,它并不总是被接受
此示例崩溃(`na.rm``参数的值不兼容):
但这些例子是有效的:
mutate(df, n = n_distinct(Species, na.rm=TRUE))
df$n = n_distinct(df$Species, na.rm=T)
mutate(df, m = mean(Sepal.Length, na.rm=T))
当然,这里的简单修复方法是避免缩写和键入TRUE
。但这也不起作用:
b = TRUE
mutate(df, n = n_distinct(Species, na.rm=b))
对这种行为有什么可以理解的解释吗?非标准评估?知道要避免什么会帮助我花更少的时间调试代码。始终建议使用全名而不是缩写,如
T
或F
,因为当存在名为T
或F
的对象时,这可能会导致问题。但是,我们不能指定像TRUE
这样的保留字作为名称
TRUE <- 1:5
TRUE这是由于一个bug造成的,现已修复。感谢Tidyverse团队
最好说TRUE
而不是T
。好的,但是最后一个例子呢?可能你需要变异(df,n=n_distinct(Species,na.rm=!!b))
,因为它可能会在环境中寻找对象。代码>评估查找环境之外的对象或类似的变异(df,n=n_distinct(Species,na.rm=!!T))
因为它正在查找名为T
的对象,感谢您的澄清和提及爆炸。我仍然不明白为什么n_distinct
无法访问基本环境中的t
。在这两者之间,我注意到f=n_是不同的;变异(df,n=f(物种,na.rm=T))
确实有效。。。这更令人费解。
TRUE <- 1:5
`TRUE` <- 1:5 # but it is not recommended
out1 <- mutate(df, n = n_distinct(Species, na.rm=!!T))
out2 <- mutate(df, n = n_distinct(Species, na.rm=!!b))
out3 <- mutate(df, n = n_distinct(Species, na.rm=TRUE))
identical(out1, out3)
#[1] TRUE
identical(out1, out2)
#[1] TRUE