我在R中犯了这个菜鸟错误
subset(mtcars, cyl = 4)
使用单等号=
而不是双等号==
为什么它会静默失败,即返回未过滤的列表,而不是因错误而中断?
实际发生的是,cyl = 4
被视为传递给...
的附加命名参数 subset.data.frame
,因此实际上没有subset
参数可以过滤。
至于为什么它以这样一种方式编程,在这种情况下不会抛出错误,你必须向R Core询问真正的答案。但是根据R如何进行函数参数匹配,这似乎很难检测。或者至少,很尴尬。
例如,如果一个包为具有名为 cyl
的实际附加参数的subset
实现了一个新的 S3 方法怎么办?