奇怪的是,R中的数据表,列名是混合的

奇怪的是,R中的数据表,列名是混合的,r,datatable,R,Datatable,因此,我在名为mc\u with\u devices的数据表中创建了一个名为mc\u split\u device的变量。但是,如果我键入mc\u with_devices$mc\u split我将获得列mc\u split\u device的值,而我从未创建任何名为mc\u split的变量 参见: $是一个速记运算符,其中x$y相当于x[[“y”,exact=FALSE]]。它通常用于访问数据帧中的变量,如mtcars$cyl或diamonds$carat中的变量 因此,exact=FALS

因此,我在名为
mc\u with\u devices
的数据表中创建了一个名为
mc\u split\u device
的变量。但是,如果我键入
mc\u with_devices$mc\u split
我将获得列
mc\u split\u device
的值,而我从未创建任何名为
mc\u split
的变量

参见:

$是一个速记运算符,其中x$y相当于x[[“y”,exact=FALSE]]。它通常用于访问数据帧中的变量,如mtcars$cyl或diamonds$carat中的变量

因此,
exact=FALSE
就是为什么
$mc_split
可以工作的原因,尽管没有一列具有该确切名称

顺便说一句,我不相信没有双引号的情况下,
mc\u和_设备[,(mc\u分割)]
会起作用。以下工作将起作用:


mc\u with_devices[,“mc\u split\u resp”]

它与列的名称部分匹配。从
?提取

名称:对于提取,这通常(请参见“环境”下)与对象的名称部分匹配

在某些情况下,可以将字符索引部分匹配(请参见pmatch)到要子集的对象的名称或dimnames

因此,默认行为是仅在按$从递归对象(环境除外)提取时使用部分匹配

因此,当你这样做

mtcars$m
你得到

#[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
#[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
这与mtcars$mpg相同

这有时会令人困惑,如果您希望确保在完成此类部分匹配时收到通知。您可以通过以下方式打开警告:

options(warnPartialMatchDollar = TRUE)
mtcars$m
# [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
#[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
警告信息: 在
$.data.frame
中(mtcars,m):数据帧中“m”与“mpg”的部分匹配


根据
?提取

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

精确的

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

所以,当我们这样做的时候

mtcars$m
#[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3
#[27] 26.0 30.4 15.8 19.7 15.0 21.4

mtcars$d
#NULL
因为有多个名称以“d”开头

 names(mtcars)
 #[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
如果我们是特定的,它会对'disp'列进行部分匹配

mtcars$di
#[1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8 275.8 275.8 472.0 460.0 440.0  78.7  75.7  71.1 120.1
#[22] 318.0 304.0 350.0 400.0  79.0 120.3  95.1 351.0 145.0 301.0 121.0