Неожиданное поведение ls(pattern="")

Поскольку я хочу связать несколько фреймов данных вместе, чтобы получить один большой фрейм, я использую mget(ls(pattern="")) для связывания строк по шаблону. Обычно это работает хорошо, за исключением следующего примера:

      library(dplyr)

`Accuracy 1` <- data.frame (Product  = "10001",
                            Bias = 0.4,
                            Variance = 0.1,
                            Disturbance = 0.5)

`Accuracy 2` <-  data.frame (Product  = "20001",
                               Bias = 0.1,
                               Variance = 0.1,
                               Disturbance = 0.8)

`Accuracy_3` <-  data.frame (Product  = "30001",
                             x = "test",
                             y = 0.1,
                             z = 0.2,
                             w = "why")

acc_output <-  mget(ls(pattern="Accuracy *")) %>%
  bind_rows()

Как видите, один из фреймов данных (Accuracy_3) отображает другой шаблон имени. Я надеялся, что когда я определил шаблон с пробелом после слова Accuracy, этот кадр будет проигнорирован и только первые два кадра будут связаны вместе,

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

1 ответ

Решение

Образец в lsявляется регулярным выражением (см., например, https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html).

В вашем шаблоне Accuracy *, то *интерпретируется как ноль или несколько повторений предыдущего символа, т. е. пробела. В качестве Accuracy_ имеет нулевые пробелы, он соответствует шаблону.

Вместо этого вы можете использовать Accuracy или Accuracy [1-2].

Другие вопросы по тегам