R是否忽略以数据框中的点开头的变量名称扩展?

use*_*609 4 r names dataframe

我有一个数据框,其中一些变量名称包含"." 延期.看来R会忽略这个扩展并且如果我尝试在没有完整变量名的情况下访问它的话也会给我变量.造成这种情况的原因是什么?为什么会发生?以下是我的问题的一个小例子.

y <- rnorm(100)
x <- rlnorm(100)

data <- cbind.data.frame(y,x)

colnames(data) <- c("y.rnorm","x.rlnorm")

# these both return the same thing
data$y
data$y.rnorm
Run Code Online (Sandbox Code Playgroud)

Kev*_*eau 7

R设置为通过设计提供部分匹配的结果.

阅读R语言定义的第3.4和4.3节.

3.4.1性格.字符串in i与names属性匹配,x并使用生成的整数.对于[[$部分匹配,如果精确匹配失败时使用,因此x$aa将匹配x$aabb,如果x不包含名为"AA"和"AABB"组件是具有前缀"AA"的唯一名字.因为[[,部分匹配可以通过确切的参数来控制,该参数默认NA指示允许部分匹配,但是当它发生时应该导致警告.设置精确以TRUE防止发生部分匹配,FALSE值允许它并且不发出任何警告.请注意,[始终需要完全匹配.该字符串""是专门处理的:它表示'没有名字'并且不匹配任何元素(甚至没有名称的那些).请注意,部分匹配仅在提取时使用,而不在替换时使用.

4.3.2标签上的部分匹配.使用部分匹配将每个剩余的命名提供参数与剩余的正式参数进行比较.如果提供的参数的名称与形式参数的第一部分完全匹配,则认为两个参数匹配.具有多个部分匹配是错误的.注意,如果f <- function(fumble, fooey) fbody,那么f(f = 1, fo = 2)是非法的,即使第二个实际参数只匹配fooey.f(f = 1, fooey = 2)是合法的,因为第二个参数完全匹配,并从部分匹配的考虑中删除.如果形式参数包含"...",则部分匹配仅应用于其前面的参数.

更新

Uwe所述,由于[[部分匹配的行为已发生变化,因此可能会对R语言定义进行挂起更新.浏览R News可以看到以下内容已被弃用并在3.1.0版本中不存在:

$在数据框上使用运算符时的部分匹配现在会发出警告,并且可能在将来失效.如果打算进行部分匹配,请替换foo$barfoo[["bar", exact = FALSE]]

  • 不......完全停止没有影响 (2认同)