Почему R не выдает ошибку, когда я использую только начальную часть имени столбца во фрейме данных?

У меня есть фрейм данных, содержащий различные столбцы вместе с sender_bank_flag. Я выполнил следующие два запроса в своем фрейме данных.

sum(s_50k_sample$sender_bank_flag, na.rm=TRUE)

sum(s_50k_sample$sender_bank, na.rm=TRUE)

Я получил одинаковый результат от обоих запросов, хотя в моем фрейме данных нет такого столбца, как sender_bank. Я ожидал получить ошибку для второго кода. Не знал, что в R есть такая функциональность! Кто-нибудь знает, что это за функция и как ее лучше использовать?


person Harsh Khad    schedule 28.08.2018    source источник
comment
Это происходит из-за частичного совпадения позади $. См. ?Extract. Попробуйте s_50k_sample[["sender_bank_flag"]] и s_50k_sample[["sender_bank"]]   -  person Zheyuan Li    schedule 28.08.2018
comment
李哲源, опубликуйте это как ответ. options(warnPartialMatchDollar=TRUE) тоже может быть интересно...   -  person Ben Bolker    schedule 28.08.2018
comment
Дополнительную информацию можно найти в разделе Advanced R, посвященном подразделам, особенно в части с знак $ и здесь, в определении языка R 3.4 и этот сообщение о сопоставлении аргументов на SO. Хотя последний больше касается сопоставления имен функций.   -  person phiver    schedule 28.08.2018
comment
Да, большое спасибо вам обоим. Действительно полезно. PS: Только что посмотрел на это сегодня, поэтому отложенный ответ! :)   -  person Harsh Khad    schedule 05.10.2018


Ответы (1)


Вероятно, стоит дополнить все комментарии ответом.


Оба мой комментарий и BenBolker указывает на страницу документа ?Extract:

В разделе Рекурсивные (спискообразные) объекты:

И "[[", и "$" выбирают один элемент списка. Основное отличие состоит в том, что "$" не позволяет вычислять индексы, тогда как "[[" разрешает. x$name эквивалентно x[["name", exact = FALSE]]. Кроме того, поведением частичного совпадения "[[" можно управлять с помощью аргумента exact.

В разделе Индексы символов:

В некоторых случаях индексы символов могут частично сопоставляться (см. ?pmatch) с именами или именами диммеров поднабора объекта (но не для подназначения). В отличие от S (Becker et al, стр. 358), R никогда не использует частичное совпадение при извлечении с помощью "[", а частичное совпадение по умолчанию не используется с помощью "[[" (см. аргумент exact). .

Таким образом, поведение по умолчанию заключается в использовании частичного сопоставления только при извлечении из рекурсивных объектов (кроме сред) с помощью "$". Даже в этом случае предупреждения можно включить с помощью options(warnPartialMatchDollar = TRUE).

Обратите внимание, что в руководстве содержится обширная информация, и убедитесь, что вы полностью ее усвоили. Я отформатировал содержимое, добавив темы переполнения стека, где это уместно.


Ссылки предоставлены комментарий phiver заслуживают прочтения в долгосрочной перспективе.

person Zheyuan Li    schedule 28.08.2018