当我在数据框中仅使用列名的初始部分时,为什么R不会抛出错误?

Har*_*had 5 r columnname dataframe

我有一个包含各种列的数据框sender_bank_flag.我在我的数据框上运行了以下两个查询.

sum(s_50k_sample$sender_bank_flag, na.rm=TRUE)

sum(s_50k_sample$sender_bank, na.rm=TRUE)

即使sender_bank我的数据框中没有这样的列,我从两个查询中获得了相同的输出.我希望第二个代码出错.不知道R有这样的功能!有谁知道这个功能究竟是什么?如何更好地利用它?

李哲源*_*李哲源 4

将所有评论添加到答案中可能是值得的。


我的评论BenBolker都指向文档页面?Extract

在递归(类似列表)对象下:

"[["选择"$"列表中的单个元素。主要区别在于"$"不允许计算索引,"[[". x$name相当于x[["name", exact = FALSE]]. "[["此外,可以使用参数控制的部分匹配行为exact

在字符索引下:

?pmatch在某些情况下,字符索引可以与要子集化的对象的名称或暗名部分匹配(请参阅 参考资料)(但绝不能用于子赋值)。与 S(Becker等人,第 358 页)不同,R在通过 提取时从不"["使用部分匹配,并且默认情况下不使用部分匹配"[["(参见参数exact)。

因此,默认行为是仅在通过 . 从递归对象(环境除外)中提取时才使用部分匹配"$"。即使在这种情况下,也可以通过 来打开警告options(warnPartialMatchDollar = TRUE)

请注意,该手册信息丰富,请确保您充分理解它们。我格式化了内容,在相关的地方添加了 Stack Overflow 线程。


phiver 评论提供的链接值得长期阅读。