Использование знака доллара в кадрах данных с пропущенным концом имени - PullRequest
0 голосов
/ 29 мая 2019

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

dframe1 = data.frame(
  hello_a = "a",
  hello_b = "b"
)

dframe1$hello
#> NULL


dframe2 = data.frame(
  hello_a = "a",
  bye_b = "b"
)

dframe2$hello
#> [1] a
#> Levels: a
dframe2$bye
#> [1] b
#> Levels: b
dframe2[,"bye"]
#> Error in `[.data.frame`(dframe2, , "bye"): undefined columns selected
dframe2[,"bye_b"]
#> [1] b
#> Levels: b

Создано в 2019-05-29 пакетом представить (v0.2.0).

ЭтоСтранно для меня, есть ли способ обеспечить "строгий" режим для R, чтобы этого не произошло?Я понимаю, что фреймы данных - это своего рода списки в R, но есть ли документация по использованию $?

1 Ответ

3 голосов
/ 29 мая 2019

Я нашел документы по этой проблеме,

x $ name эквивалентно x [["name", точный = FALSE]]

Так что если мысделать

dframe2[["bye",exact = FALSE]]
[1] b
Levels: b

мы получим ожидаемое поведение.Я до сих пор не знаю, можем ли мы изменить это поведение без использования [[, для которого нужна строка.

EDIT

Как Бен Болкер предполагает в комментариях, этоболее или менее то, что я хотел сделать.

options(warnPartialMatchDollar=TRUE)
options(warn=2)

dframe2 = data.frame(
  hello_a = "a",
  bye_b = "b"
)

dframe2$hello
#> Warning in `$.data.frame`(dframe2, hello): Partial match of 'hello' to
#> 'hello_a' in data frame
#> [1] a
#> Levels: a

Создан в 2019-05-29 пакетом представлением (v0.2.0).

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