Это ошибка кодирования в R в Windows, как вы уже сообщили о r-devel .
В качестве обходного пути вы можете сделать следующее:
Чтениеваши данные с помощью {readr} (из-за ошибки вы не можете использовать буквенный символ бесконечности в R, но вместо этого вы должны использовать escape-код Unicode \u221E
).
library(readr)
(xdf <- read_csv("x, y\n\u221E, 2", col_types = cols(.default = col_character())))
#> # A tibble: 1 x 2
#> x y
#> <chr> <chr>
#> 1 ∞ 2
Здесь мы читаем во всех столбцахкак символ (а не числовой), потому что мы должны заменить символ бесконечности на Inf
позже.Подробнее о том, как указать тип столбца, см. help(readr::cols())
.
Теперь замените символ бесконечности зарезервированным словом бесконечности в R, Inf
и преобразуйте его в числовой.Я использую str_replace()
из {stringr} здесь, но это должно работать и с base::gsub()
.
library(stringr)
as.numeric(str_replace(xdf$x, pattern= "\u221E", replacement = "Inf"))
#> [1] Inf
Если вы хотите сделать это для всех столбцов в вашем data.frame, вы можетесделать это, например, с помощью функции mutate_all
из dplyr
.
library(dplyr)
mutate_all(xdf, str_replace, pattern= "\u221E", replacement = "Inf") %>%
mutate_all(as.numeric)
#> # A tibble: 1 x 2
#> x y
#> <dbl> <dbl>
#> 1 Inf 2