Присвоение значения переменной, которая имеет "точку" в имени - PullRequest
4 голосов
/ 20 мая 2011

Я новичок в R и пробовал следующий код. К моему удивлению, присвоение чего-либо ret$log.id на самом деле привело бы к тому же значению, которое будет присвоено ret$log. Например.,

 ret <- c()
 ret$log.id <- 'a'

Выполнение следующего вернет "a"

ret$log

Это то, что R должен делать? Я надеюсь, что кто-то может дать мне некоторое представление об этом.

Спасибо

Ответы [ 3 ]

6 голосов
/ 20 мая 2011

Да, оператор $ выполняет частичное сопоставление. Вы можете немного изучить поведение со следующим:

ret <- c()
ret$log.id <- "a"

ret$l #Returns "a"

ret$log.at <- "b"

Теперь посмотрим, что вернулось со следующим:

ret$l
ret$log
ret$log.i
ret$log.a
6 голосов
/ 20 мая 2011

Для уточнения частичного соответствия стояка. Со страницы справки для $:

По аргументам:

name     A literal character string or a name (possibly backtick quoted).
For extraction, this is normally (see under ‘Environments’) partially matched to the names 
of the object.

и затем под индексами персонажей:

Character indices can in some circumstances be partially matched (see pmatch) to the 
names or dimnames of the object being subsetted (but never for subassignment). 

Также под индексами персонажей:

Thus the default behaviour is to use partial matching only when extracting from 
recursive objects (except environments) by $. Even in that case, warnings can be 
switched on by options(warnPartialMatchAttr = TRUE).

Есть и другие подробности, на которые есть ссылки в names и pmatch, но это прояснило их для меня.

4 голосов
/ 20 мая 2011

Это нормальное поведение:

x = data.frame(happy = rnorm(10), sad = rnorm(10))

> x$hap
 [1] -0.9373243 -0.9497992 -0.1413024 -0.9857493  1.7156495  0.8715162  0.8377111
 [8] -0.4161816 -0.3976979 -0.2569765

Я думаю, что Чейз прав - частичное совпадение в игре.

Интересно, что если есть два столбца, которые соответствуют частичному совпадению, то вместо предупреждения возвращается NULL:

y = data.frame(happy = rnorm(10), sad = rnorm(10), sadder = rnorm(10))

> y$sa
NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...