#r
Вопрос:
Рассмотрим этот код R
> l = list(key = 1)
> l$k
[1] 1
> l$ke
[1] 1
> l[['k']]
NULL
> names(l)
[1] "key"
Означает ли это, что вы можете получить доступ к члену списка с $
его частичным именем и его частичным именем? Я не мог поверить своим глазам, когда обнаружил это после неудачной охоты на жуков.
Является ли это особенностью списка R? Есть ли для этого какое-нибудь название? Можно ли его отключить? Это вызывает очевидные проблемы, когда вы используете его как диктант Python.
Ответ №1:
Это функция, которая предназначена для помощи в интерактивном режиме. Вы можете затянуть его локально, посмотрите help(options)
, что имеет
‘warnPartialMatchArgs’: logical. If true, warns if partial
matching is used in argument matching.
‘warnPartialMatchAttr’: logical. If true, warns if partial
matching is used in extracting attributes via ‘attr’.
‘warnPartialMatchDollar’: logical. If true, warns if partial
matching is used for extraction by ‘$’.
Пример:
R> l <- list(key = 1)
R> l$k
[1] 1
R> options("warnPartialMatchDollar"=TRUE)
R> l$k
[1] 1
Warning message:
In l$k : partial match of 'k' to 'key'
R>
и вы можете дополнительно продвигать предупреждения об ошибках, если захотите (и эта опция описана на той же странице).
Ответ №2:
Да, $
сделаем частичное сопоставление. Проверьте документ R функции $ , введя в консоли
?` #r
Вопрос:
Рассмотрим этот код R> l = list(key = 1) > l$k [1] 1 > l$ke [1] 1 > l[['k']] NULL > names(l) [1] "key"
Означает ли это, что вы можете получить доступ к члену списка с
$
его частичным именем и его частичным именем? Я не мог поверить своим глазам, когда обнаружил это после неудачной охоты на жуков.Является ли это особенностью списка R? Есть ли для этого какое-нибудь название? Можно ли его отключить? Это вызывает очевидные проблемы, когда вы используете его как диктант Python.
Ответ №1:
Это функция, которая предназначена для помощи в интерактивном режиме. Вы можете затянуть его локально, посмотрите
help(options)
, что имеет‘warnPartialMatchArgs’: logical. If true, warns if partial matching is used in argument matching. ‘warnPartialMatchAttr’: logical. If true, warns if partial matching is used in extracting attributes via ‘attr’. ‘warnPartialMatchDollar’: logical. If true, warns if partial matching is used for extraction by ‘$’.
Пример:
R> l <- list(key = 1) R> l$k [1] 1 R> options("warnPartialMatchDollar"=TRUE) R> l$k [1] 1 Warning message: In l$k : partial match of 'k' to 'key' R>
и вы можете дополнительно продвигать предупреждения об ошибках, если захотите (и эта опция описана на той же странице).
Ответ №2:
Да,
$
сделаем частичное сопоставление. Проверьте документ R функции $ , введя в консолиВ справочном документе говорится:
И
[[
то, и другое, и$
выберите один элемент списка. Основное различие заключается в том, что$
не позволяет вычислять индексы, в то[[
время как позволяет.x$name
эквивалентноx[["name", exact = FALSE]]
. Кроме того, поведение частичного соответствия[[
можно контролировать с помощью точного аргумента.Согласно книге Хэдли Уикхема «Расширенный R», вы можете отключить частичное сопоставление
$
, установив глобальный параметрwarnPartialMatchDollar
TRUE
равным, но это может повлиять на поведение в другом загруженном вами коде, например, из пакета.
Комментарии:
1. Я новичок в переполнении стека, пытаюсь ответить на вопрос, оставшийся без ответа. Мне потребовалось 20 минут, чтобы прочитать и понять вопрос, придумать свое решение, дважды проверить его в R и тщательно записать свой ответ. Извините, что я не нашел ответа так быстро и подробно, как ваш. В следующий раз я постараюсь быть лучше.
2. Справедливо, но сейчас это все еще довольно излишне. Мы все тоже пришли сюда поздно.