R, кажется, игнорирует часть имени переменной после подчеркивания - PullRequest
1 голос
/ 02 мая 2019

Я столкнулся со странной проблемой с R. У меня есть фрейм данных с несколькими переменными.Я добавляю к этому фрейму данных переменную, которая содержит подчеркивание, например:

allres$tmp_weighted <- allres$day * allres$area

Перед тем, как я это сделаю, R скажет мне, что переменная allres$tmp не существует (что верно).Однако после добавления allres$tmp_weighted к кадру данных и вызова allres$tmp я получаю данные для allres$tmp_weighted.Кажется, что часть после подчеркивания не имеет никакого значения для R. Я пробовал это с несколькими другими переменными / именами, и это всегда работает таким образом

Я не думаю, что это должно работать так?Я что-то пропускаю здесь?Ниже я вставил некоторый код вместе с выводом из консоли.

# first check whether variable exists
allres_sw$Ndpsw

> NULL

#define new variable with underscore in variable name
allres_sw$Ndpsw_weighted <- allres_sw$Ndepswcrit * allres_sw$Area

#check again whether variable exists
allres_sw$Ndpsw

>   [1]    17.96480   217.50240    44.84415    42.14560     0.00000    43.14444    53.98650     9.81939     0.00000   110.67720

# this is the output that I would expect from "Ndpsw_weighted" - and indeed do get
allres_sw$Ndpsw_weighted
>   [1]    17.96480   217.50240    44.84415    42.14560     0.00000    43.14444    53.98650     9.81939     0.00000   110.67720

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Посмотрите на ?`[` или ?`$` в консоли R.Если вы посмотрите на аргумент name функций extract , то в нем говорится, что имена частично совпадают при использовании оператора $ (в отличие от оператора `[[`, который использует точные совпадения на основеexact = TRUE аргумент).

С ?`$`

Буквенная строка символов или имя (возможно, кавычка).Для извлечения это обычно (см. В разделе «Среды») частично соответствует именам объекта.

1 голос
/ 02 мая 2019

Просто чтобы немного расширить ответ Вила ... От help('$'):

x$name

name
Буквенная строка символов или имя (возможно backtick цитируется).Для извлечения это обычно (см. В разделе «Среды») частично соответствует names объекта.

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

exact
Управляет возможным частичным сопоставлением [[ при извлечении по символьному вектору (для большинства объектов, но смотрите в разделе «Окружение»).По умолчанию частичное совпадение отсутствует.Значение NA допускает частичное совпадение, но выдает предупреждение при его возникновении.Значение FALSE позволяет выполнить частичное сопоставление без предупреждения.

Ключевая фраза здесь частичное совпадение (см. pmatch).Теперь вы поймете, что подчеркивание не является чем-то особенным - вы можете сократить allres_sw$Ndpsw_weighted до allres_sw$Ndp, при условии, что никакое имя не будет более похожим, чем allres_sw$Ndepswcrit.

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