Неожиданное поведение 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]
.