当我需要过滤data.frame,即提取满足某些条件的行时,我更喜欢使用以下subset
功能:
subset(airquality, Month == 8 & Temp > 90)
而不是[
功能:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
我偏爱的主要原因有两个:
我发现代码从左到右读起来更好。即使对R一无所知的人也可以说出
subset
上面的陈述在做什么。因为列可以在
select
表达式中称为变量,所以我可以节省一些击键。在上面的示例中,我只需输入airquality
一次subset
,但只需输入3次[
。
因此,我过着幸福的生活,subset
在任何地方都可以使用它,因为它更短且读起来更好,甚至向我的R编码员倡导它的美。但是昨天我的世界崩溃了。在阅读subset
文档时,我注意到以下部分:
警告
这是旨在交互使用的便利功能。对于编程,最好使用标准的子集函数,例如[,尤其是参数子集的非标准评估会产生意想不到的后果。
有人可以帮助澄清作者的意思吗?
首先,“ 交互使用 ” 是什么意思?我知道交互式会话是什么,而不是在BATCH模式下运行的脚本,但是我看不出它应该有什么区别。
然后,请您解释一下“ 论点子集的非标准评估 ”,为什么这样做很危险,也许可以举个例子?
dplyr::filter
有同样的问题。即,如果环境恰好具有该名称的变量,它将使用它而不是数据框中的变量。使混乱的调试!
with(airquality, airquality[Month == 8 & Temp > 90, ])