【发布时间】:2019-11-04 18:40:51
【问题描述】:
使用命名向量时
vec <- c(a = 1, b = 2)
当我应该写vec["a"] 或vec[["a"]] 来分别访问带名称和不带名称的相应值时,我经常发现自己通过编写vec$a 来引入错误。
我认为 vec$a 是一个错误是违反直觉的,因为 $ 通常会提取命名的东西。这种感觉甚至似乎得到支持,例如在?Extract 中,示例用法是x$name - 这不是非常适合命名 向量吗?
这让我想到了重载 $ 运算符以处理命名向量的可能性。但是,我对 R 中的运算符重载不是很有经验,并且我理解(例如,从答案 here 中)在重载基本运算符时建议谨慎。
我的相互关联的问题:我不明白为什么我不应该像描述的那样超载$?也就是说,是否有(在某种模糊的意义上)一个“好”的理由说明这不是 R 中的默认设置?如果没有,我该如何明智地这样做?
我知道在实践中这可能是一个坏主意,如果只是出于便携性的原因,但我仍然很好奇。
【问题讨论】:
-
您不应该这样做,因为您的代码会让任何确实理解 R 的人感到困惑
-
@akun:我明白这一点,但我很好奇为什么会这样,以及如何改变它。
-
@HongOoi:正如最后一段所建议的那样,我知道这一点,但正如我所说,我很想了解这一点。
-
我觉得这其实是一个非常有趣的想法,尤其是在将具有命名元素的对象转换为数据框以及反之亦然的上下文中。
标签: r