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

时间:2019-05-02 11:25:40

标签: r variables variable-names

我遇到了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

2 个答案:

答案 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更相似。