R似乎忽略了下划线后面的部分变量名

R似乎忽略了下划线后面的部分变量名,r,variables,variable-names,R,Variables,Variable Names,我遇到了一个与R有关的奇怪问题。我有一个包含多个变量的数据帧。我在此数据框中添加了一个包含下划线的变量,例如: allres$tmp_weighted <- allres$day * allres$area 请在R控制台中查看?`[`或?`$`。如果查看函数的名称参数,则说明在使用$运算符时名称部分匹配(与`[`运算符相反,后者使用基于精确=真参数的精确匹配) 从?`$` 文字字符串或名称(可能带反勾号)。对于提取,这通常(请参见“环境”下)与对象的名称部分匹配 仅对Wil的答案进行一些

我遇到了一个与R有关的奇怪问题。我有一个包含多个变量的数据帧。我在此数据框中添加了一个包含下划线的变量,例如:

allres$tmp_weighted <- allres$day * allres$area

请在R控制台中查看
?`[`
?`$`
。如果查看函数的
名称
参数,则说明在使用
$
运算符时名称部分匹配(与
`[`
运算符相反,后者使用基于
精确=真
参数的精确匹配)

?`$`

文字字符串或名称(可能带反勾号)。对于提取,这通常(请参见“环境”下)与对象的名称部分匹配


仅对Wil的答案进行一些扩展…从
帮助(“$”)

name

一个文字字符串或一个(可能是 对于提取,这通常是(见下) “环境”)部分匹配到 物体的形状。

x$name
相当于
x[[“name”,exact=FALSE]
。此外,部分匹配
[[
的行为可以使用
exact
参数进行控制

精确的
控制在以下情况下
[[
的可能部分匹配 通过字符向量提取(对于大多数对象,请参见下的 “环境”)。默认值为不部分匹配。值
NA
允许部分匹配,但在匹配时会发出警告 发生。值
FALSE
允许部分匹配,而无需任何 警告


这里的关键短语是部分匹配(请参阅)。现在您将了解下划线没有什么特别之处-您可以将
allres\u sw$Ndpsw\u weighted
缩写为
allres\u sw$Ndp
,但前提是没有任何名称比
allres\u sw$Ndepswcrit

更相似。谢谢Wil!这对我来说真的很新鲜。所以它是如此(正如Armali也指出的)与下划线无关。@Lena这是正确的,它与下划线无关。感谢Armali的详细回答。事实上,它与下划线无关-我看错了方向。我现在可以看出,如果我插入allres_sw[[“Ndpsw”,exact=TRUE]],我就不会得到“Ndpsw”的结果.我可以看出,部分匹配可以加快编码速度(因为您不必键入整个变量名),但我也认为它会使编码更容易出错(意外地键入一个名称可能不会导致错误消息,因为您键入的是另一个变量的部分名称)。但我想这就是它的方式。
# 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
x$name