Как R обрабатывает неоднозначные имена столбцов? - PullRequest
0 голосов
/ 12 февраля 2019

Недавно я столкнулся со странным поведением R, которое я хотел лучше понять.

Давайте предположим два следующих примера:

Example 1:

ebit.2018_base <- c(1,2,3,5,7,3,2)
ebit.2017_base <- c(1,2,3,5,7,3,2)
ebit <- data.frame(ebit.2018_base, ebit.2017_base)

ebit$test <- ebit$ebit.2018 * 5

R может вычислять с этим именем столбцадаже если он не совсем совпадает.

Example 2

ebit.2018_base <- c(1,2,3,5,7,3,2)
ebit.2018_notbase <- c(1,2,3,5,7,3,2)
ebit.2017_base <- c(1,2,3,5,7,3,2)
ebit <- data.frame(ebit.2018_base, ebit.2018_notbase, ebit.2017_base)

ebit$test <- ebit$ebit.2018 * 5

Это не работает.

Моя гипотеза: В первом примере R может ясно понять, что я имею в видув столбец ebit.2018_base, используя термин ebit.2018.Во втором примере это неоднозначно, потому что есть два столбца, начинающиеся с ebit.2018.

Это правильно?Извините, если это общеизвестно или уже рассматривалось ранее, я просто хочу убедиться, что я правильно понимаю логику.

1 Ответ

0 голосов
/ 12 февраля 2019

Да, вы правы!

Из документации Extract (доступ к которой вы можете получить через: ?"$" или ?Extract):

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

Поскольку $ допускает частичное сопоставление, ваш первый случай работает.Но во втором случае он не разрешает один столбец и поэтому думает, что вы запрашиваете несуществующий;отсюда и ошибка.

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