R如何处理歧义的列名?

时间:2019-02-12 10:05:15

标签: r

最近,我遇到了R的一种奇怪行为,我想更好地理解。

让我们假设以下两个示例:

Example 1:

ebit.2018_base <- c(1,2,3,5,7,3,2)
ebit.2017_base <- c(1,2,3,5,7,3,2)
ebit <- data.frame(ebit.2018_base, ebit.2017_base)

ebit$test <- ebit$ebit.2018 * 5

R可以使用此列名进行计算,即使它不完全匹配。

Example 2

ebit.2018_base <- c(1,2,3,5,7,3,2)
ebit.2018_notbase <- c(1,2,3,5,7,3,2)
ebit.2017_base <- c(1,2,3,5,7,3,2)
ebit <- data.frame(ebit.2018_base, ebit.2018_notbase, ebit.2017_base)

ebit$test <- ebit$ebit.2018 * 5

这不起作用。

我的假设:在第一个示例中,R可以清楚地理解,我使用术语ebit.2018_base是指列ebit.2018。在第二个示例中,它是模棱两可的,因为有两列以ebit.2018开头。

这是正确的吗?抱歉,如果这是常识或以前已经解决过,我只想确保我正确理解了背后的逻辑。

1 个答案:

答案 0 :(得分:2)

是的,你是对的!

摘录(可通过?"$"?Extract访问的文档):

  

[[和$都选择列表中的单个元素。主要区别   是$不允许计算索引,而[[允许。 x $ name是   等效于x [[“ name”,确切= FALSE]]。另外,部分匹配   [[的行为可以使用精确的参数进行控制。

因为$允许部分匹配,所以第一种情况有效。但是在第二种情况下,它不能解析单个列,因此认为您要的是不存在的列;因此是错误。