奇怪的是,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