к членам списка можно получить доступ с частичным именем? Является ли это особенностью?

#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. Справедливо, но сейчас это все еще довольно излишне. Мы все тоже пришли сюда поздно.