我有一个数据框,其中一些变量名称包含“。”延期。如果我尝试在没有完整变量名的情况下访问它,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
最佳答案
R 设置为按设计为部分匹配提供结果。
阅读栏目 3.4 & 4.3 R语言定义。
3.4.1 Character. The strings in
i
are matched against the names attribute ofx
and the resulting integers are used. For[[
and$
partial matching is used if exact matching fails, sox$aa
will matchx$aabb
ifx
does not contain a component named "aa" and "aabb" is the only name which has prefix "aa". For[[
, partial matching can be controlled via the exact argument which defaults toNA
indicating that partial matching is allowed, but should result in a warning when it occurs. Setting exact toTRUE
prevents partial matching from occurring, aFALSE
value allows it and does not issue any warnings. Note that[
always requires an exact match. The string""
is treated specially: it indicates ‘no name’ and matches no element (not even those without a name). Note that partial matching is only used when extracting and not when replacing.
和
4.3.2 Partial matching on tags. Each remaining named supplied argument is compared to the remaining formal arguments using partial matching. If the name of the supplied argument matches exactly with the first part of a formal argument then the two arguments are considered to be matched. It is an error to have multiple partial matches. Notice that if
f <- function(fumble, fooey) fbody
, thenf(f = 1, fo = 2)
is illegal, even though the 2nd actual argument only matchesfooey
.f(f = 1, fooey = 2)
is legal though since the second argument matches exactly and is removed from consideration for partial matching. If the formal arguments contain ‘...’ then partial matching is only applied to arguments that precede it.
更新
正如 Uwe 所指出的,可能存在对 R 语言定义的未决更新,因为
[[
的行为部分匹配已更改。浏览 R News显示以下内容在 3.1.0 版本中已弃用和失效:Partial matching when using the
$
operator on data frames now throws a warning and may become defunct in the future. If partial matching is intended, replacefoo$bar
byfoo[["bar", exact = FALSE]]
关于r - R 是否忽略数据框中以点开头的变量名称扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47583897/