Используя as.data.table, ошибка получения не может привести класс integer64 к data.frame

У меня есть столбец с номерами идентификаторов посылок, которые data.table::fread читаются как integer64. Несколько месяцев назад он выдавал ошибки, поэтому я конвертировал его в персонажа, но после того, как он перестал выдавать ошибки, я не видел недостатков в том, чтобы оставить все как есть. Но после некоторой обработки с пакетом sp я попытался вернуться из SpatialPointsDataFrame обратно в data.table с x <- as.data.table(x) и получил:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class ""integer64"" to a data.frame

Чтение в качестве символа является общепринятой рекомендацией -integer-id-n#35172059">здесь. Но я пытаюсь понять, что происходит. Это могли быть номера, а не идентификаторы. Похоже, что sp::coordinates может принимать целые 64 числа из data.table в свой собственный тип фрейма данных, но оттуда это улица с односторонним движением?

РЕДАКТИРОВАТЬ: я собирался сделать traceback() и т. д., предложенный @MichaelChirico в комментариях, понял, что R зависает после сообщения об ошибке, решил попробовать небольшой образец. К моему удивлению, он работал без ошибок/предупреждений. До сих пор самая большая отдельная таблица, в которую я добавлял пространственные данные и преобразовывала их обратно, содержала около 2,25 миллиона строк. Я продолжал увеличивать размер выборки, чтобы увидеть, где она сломается. Конечным результатом была (для меня) сумеречная зона - я смог преобразовать весь SPDF, если я рандомизировал строки, а если нет! https://imgur.com/aghsdDA Это не "решение", поэтому я оставлю это здесь для тех, кто знает, что происходит под капотом.

EDIT_2: встроенное иллюстративное изображение в предыдущем редактировании заменено ссылкой. Ссылка на файл SPDF размером 12 МБ находится здесь. Интересующая переменная - целое число64 'Prop' - см. выше; пытается вернуться из SPDF обратно в data.table. Воспроизводится на моем Mac 10.10.5 с Rstudio v1.1.453 на R v3.3.3, пакетами data.table v1.10.4-3 и sp v1.3-1. Замените PATH_TO_FILE своим местоположением загрузки ниже:

x <- readRDS("PATH_TO_FILE/x_SPDF.rds")

z <- x[sample(nrow(x), 2535323),] # all rows but randomized
z <- as.data.table(z) # works
x1 <- x[1:2535322, ] # un-randomized subset w/ nrow() minus 1
x1 <- as.data.table(x1) # works
x <- as.data.table(x) # stops with error noted in initial question

Быть на старом драндулете Mac может иметь какое-то отношение к этому, но я полагаю, что если он работает с подмножествами и рандомизированными подмножествами любого размера, он должен работать в целом.


person armipunk    schedule 07.04.2019    source источник
comment
Думаю, проще всего установить и загрузить пакет bit64.   -  person MichaelChirico    schedule 07.04.2019
comment
почему вы столкнулись с этой конкретной ошибкой, попробуйте проверить traceback() и/или debugonce(as.data.frame.default) или debugonce(as.data.table)   -  person MichaelChirico    schedule 07.04.2019
comment
Пожалуйста, не публикуйте изображения кода/данных/ошибок: их нельзя копировать или искать (SEO), они ломают программы чтения с экрана и могут не подходить для некоторых мобильных устройств. Ссылка: meta.stackoverflow.com/a/285557/3358272xkcd.com/2116). Кроме того, пожалуйста, сделайте этот вопрос воспроизводимым. Сюда входит пример кода (включая список небазовых пакетов R), примеры данных (например, dput(head(x))) и ожидаемый результат. Ссылки: stackoverflow.com/questions/5963269, stackoverflow.com/help/mcve и stackoverflow.com/tags/r/info.   -  person r2evans    schedule 08.04.2019