我遇到了R的一个奇怪问题。我有一个带有多个变量的数据框。我向包含下划线的数据框添加了一个变量,例如:
allres$tmp_weighted <- allres$day * allres$area
在执行此操作之前,R告诉我变量allres$tmp
不存在(正确)。但是,在将allres$tmp_weighted
添加到数据帧并调用allres$tmp
之后,我得到了allres$tmp_weighted
的数据。似乎下划线后的部分对于R根本不重要。我尝试了其他几个变量/名称,并且总是这样工作
我认为这不应该这样吗?我在这里俯瞰什么吗?下面,我在控制台中粘贴了一些代码以及输出。
# first check whether variable exists
allres_sw$Ndpsw
> NULL
#define new variable with underscore in variable name
allres_sw$Ndpsw_weighted <- allres_sw$Ndepswcrit * allres_sw$Area
#check again whether variable exists
allres_sw$Ndpsw
> [1] 17.96480 217.50240 44.84415 42.14560 0.00000 43.14444 53.98650 9.81939 0.00000 110.67720
# this is the output that I would expect from "Ndpsw_weighted" - and indeed do get
allres_sw$Ndpsw_weighted
> [1] 17.96480 217.50240 44.84415 42.14560 0.00000 43.14444 53.98650 9.81939 0.00000 110.67720
答案 0 :(得分:2)
在您的R控制台中查看?`[`
或?`$`
。如果查看extract函数的name
参数,它会指出使用$
运算符时名称是部分匹配的(与`[[`
运算符相反,后者使用完全相同根据{{1}}参数进行匹配)。
来自exact = TRUE
文字字符串或名称(可能用反引号引起来)。对于提取,通常这与对象名称部分匹配(请参见“环境”下的内容)。
答案 1 :(得分:1)
只是稍微扩展一下威尔的答案...来自help('$')
:
x$name
name
文字字符串或name(可能是backtick 引)。对于提取,通常是这样(请参见 “环境”)与names
部分匹配 对象。
x$name
等效于x[["name", exact = FALSE]]
。另外,部分匹配 可以使用[[
参数控制exact
的行为。
exact
在以下情况下控制[[
的部分匹配 按字符向量提取(对于大多数对象,但请参见 “环境”)。默认为不部分匹配。值NA
允许部分匹配,但在出现部分匹配时发出警告 发生。值FALSE
允许部分匹配而没有任何匹配 警告。
此处的关键词是部分匹配(请参见pmatch
)。现在您将了解下划线没有什么特别的-您可以将allres_sw$Ndpsw_weighted
缩写为allres_sw$Ndp
,只要没有一个名称比allres_sw$Ndepswcrit
更相似。