最近,我遇到了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
开头。
这是正确的吗?抱歉,如果这是常识或以前已经解决过,我只想确保我正确理解了背后的逻辑。
答案 0 :(得分:2)
是的,你是对的!
摘录(可通过?"$"
或?Extract
访问的文档):
[[和$都选择列表中的单个元素。主要区别 是$不允许计算索引,而[[允许。 x $ name是 等效于x [[“ name”,确切= FALSE]]。另外,部分匹配 [[的行为可以使用精确的参数进行控制。
因为$允许部分匹配,所以第一种情况有效。但是在第二种情况下,它不能解析单个列,因此认为您要的是不存在的列;因此是错误。