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