Как избежать странной ошибки умлаута при использовании data.table

Мне нужно оперировать суммами в разреженном фрейме данных с учетом идентификаторов

require(data.table)
sentEx = structure(list(abend = c(1, 1, 0, 0, 2), aber = c(0, 1, 0, 0, 
0), über = c(1, 0, 0, 0, 0), überall = c(0, 0, 0, 0, 0), überlegt = c(0, 
0, 0, 0, 0), ID = structure(c(1L, 1L, 2L, 2L, 2L), .Label = c("0019", 
"0021"), class = "factor"), abgeandert = c(1, 1, 1, 0, 0), abgebildet = c(0, 
0, 1, 1, 0), abgelegt = c(0, 0, 0, 0, 3)), .Names = c("abend", 
"aber", "über", "überall", "überlegt", "ID", "abgeandert", "abgebildet", 
"abgelegt"), row.names = c(1L, 2L, 16L, 17L, 18L), class = "data.frame")

sentEx  # How it looks
   abend aber über überall überlegt   ID abgeandert abgebildet abgelegt
1      1    0    1       0        0 0019          1          0        0
2      1    1    0       0        0 0019          1          0        0
16     0    0    0       0        0 0021          1          1        0
17     0    0    0       0        0 0021          0          1        0
18     2    0    0       0        0 0021          0          0        3

Без "умлаута" работает нормально:

sentEx.dt <- data.table(sentEx[,-c(3,4,5)])[, lapply(.SD, sum), by=ID]
(sentExSum <- as.data.frame(sentEx.dt))  # Need again as dataframe, which looks like:
    ID abend aber abgeandert abgebildet abgelegt
1 0019     2    1          2          0        0
2 0021     2    0          1          2        3 

Но в противном случае я получаю эту ошибку:

sentEx.dt <- data.table(sentEx)[, lapply(.SD, sum), by=ID]
# Error in gsum(`über`) : object 'über' not found
      sentExSum <- as.data.frame(sentEx.dt)

Некоторая дополнительная информация о сеансе (поскольку проблема связана с системой - см. комментарии):

sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252    LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.9.2

loaded via a namespace (and not attached):
[1] plyr_1.8.1     Rcpp_0.11.0    reshape2_1.2.2 stringr_0.6.2  tools_3.0.2

Также запрашиваются команды:

require(data.table); test.data.table()
Running C:/Users/Krohana/Documents/R/win-library/3.0/data.table/tests/tests.Rraw 
Loading required package: reshape
Loading required package: hexbin
Loading required package: xts
Loading required package: bit64
Test 167.2 not run. If required call library(hexbin) first.
Don't know how to automatically pick scale for object of type ITime. Defaulting to continuous
Don't know how to automatically pick scale for object of type ITime. Defaulting to continuous
Tests 487 and 488 not run. If required call library(reshape) first.
Test 841 not run. If required call library(xts) first.
Tests 897-899 not run. If required call library(bit64) first.
All 1220 tests in inst/tests/tests.Rraw completed ok in 24.321sec on Sun Mar 02 17:57:26 2014 ts/tests.Rraw completed ok in 24.638sec on Sun Mar 02 17:55:45 2014

Запрошенные команды2:

> Encoding(names(sentEx))
[1] "unknown" "unknown" "UTF-8"   "UTF-8"   "UTF-8"   "unknown" "unknown" "unknown" "unknown"
> options(datatable.verbose=TRUE)
> options(datatable.verbose=TRUE); options(datatable.optimize=1L);

person alex    schedule 02.03.2014    source источник
comment
Я не могу воспроизвести это с помощью data.table 1.8.10 на своем Mac.   -  person Roland    schedule 02.03.2014
comment
Я только что обновился до 1.9.2 и до сих пор не могу воспроизвести ошибку. Пожалуйста, добавьте вывод dput(sentEx) к вашему вопросу.   -  person Roland    schedule 02.03.2014
comment
@Роланд Привет, спасибо! Я изменил имя конечного результата на sentExSum, и теперь он должен быть воспроизводимым. До того, как ввод sentEx для второго шага был перезаписан, ошибка больше не появлялась.   -  person alex    schedule 02.03.2014
comment
@RomanLuštrik Привет, спасибо. Невозможно изменить символы, потому что уникальность слов больше не будет сохранена. Другой проблемой было бы восстановить их обратно. потому что мне могут понадобиться точные записи. Вы знаете другой метод?   -  person alex    schedule 02.03.2014
comment
Опять же, я не могу воспроизвести эту ошибку. Предоставьте sentEx воспроизводимым образом (используя dput).   -  person Roland    schedule 02.03.2014
comment
@Roland, я добавил dput(sentEx).   -  person alex    schedule 02.03.2014
comment
Пожалуйста, добавьте свой sessionInfo(). Я все еще не получаю ошибки.   -  person Roland    schedule 02.03.2014
comment
Я тоже не могу воспроизвести это, даже после установки LOCALE.   -  person Thomas    schedule 02.03.2014
comment
@Thomas Привет, спасибо за помощь. Да, ты прав. Я пробовал на другой системе и не получил ошибку. Есть ли у вас предложения? Другая система имеет обычный (не SSD) жесткий диск, поэтому я бы предпочел работать с большими данными (20000 столбцов x 3000 строк).   -  person alex    schedule 02.03.2014
comment
@Roland Привет, спасибо за помощь. Я попытался воспроизвести проблему на другой системе и не получил ошибку! Есть ли у вас предложения? Другая система имеет обычный (не SSD) жесткий диск, поэтому я бы предпочел работать с большими данными (20000 столбцов x 3000 строк).   -  person alex    schedule 02.03.2014
comment
Извините, но я не вижу data.table в вашей информации о сеансе.   -  person Roland    schedule 02.03.2014
comment
@Roland Снова добавил весь вывод. Теперь это сессия от начала до конца. Спасибо за старания. Они действительно нужны.   -  person alex    schedule 02.03.2014
comment
Вам придется попытаться сузить различия между двумя системами. Вы определили все различия между выводом sessionInfo() в двух системах? Можете ли вы также сообщить о точных версиях операционных систем (которые могут не быть включены в sessionInfo() и могут повлиять на системные библиотеки, которые обрабатывают неанглийские символы)?   -  person Ben Bolker    schedule 02.03.2014
comment
Работайте со мной над словенской локалью (Slovenian_Slovenia.1250), последней версией data.table и Windows 7.   -  person Roman Luštrik    schedule 02.03.2014
comment
@Арун Спасибо! Я добавил необходимые команды. Они не работают должным образом, но я не могу интерпретировать тесты. Не могли бы вы взглянуть?   -  person alex    schedule 02.03.2014
comment
Я предлагаю вам обратиться в общедоступный чат R: chat.stackoverflow.com/rooms/25312/r-public, пока проблема не будет диагностирована.   -  person Roman Luštrik    schedule 02.03.2014
comment
@Арун СПАСИБО! Оно работает! Я добавил предложенный код выше. Пожалуйста, объясните мне вкратце, в чем была проблема, и почему теперь это работает? Что options(datatable.verbose=TRUE); options(datatable.optimize=1L) делать?   -  person alex    schedule 02.03.2014


Ответы (1)


Я тоже не смог воспроизвести. Но была еще одна ошибка «объект не найден», которую обнаружил Арун, и я надеюсь, что она тоже.

Теперь в версии 1.9.3 коммит 1212. Из НОВОСТЕЙ:

o В некоторых случаях может возникать ошибка «объект [имя] не найден», особенно после предыдущей ошибки. Сообщается с не-ASCII-символами в имени столбца. Мы надеемся, что это отвлекающий маневр, поскольку не-ASCII-символы поддерживаются в именах столбцов в data.table. Реализовано исправление и добавлены тесты.

Если это произойдет снова, сообщите нам об этом. Ваш тест был добавлен в набор тестов, спасибо.

person Matt Dowle    schedule 03.03.2014
comment
Спасибо много. Похоже, это из-за моей винды. - person alex; 05.03.2014
comment
@alex Почему ты думаешь, что это из-за Windows? Вы хотите сказать, что пробовали v1.9.3 с этим исправлением, и оно все еще не работает? - person Matt Dowle; 05.03.2014