WedX - журнал о программировании и компьютерных науках

Почему принуждение столбца в data.table с помощью by не работает, а принуждение без работает без предупреждения?

Ниже я делаю одну и ту же операцию двумя способами. Первый не работает, а второй работает. Мне интересно, почему? Мне не удалось найти ответ на этот вопрос в документации data.table или других местах через Google.

SOtable <- data.table(testInt=c(1:100))
SOtable[,testInt := as.double(testInt), by=1:nrow(SOtable)]
##Error in `[.data.table`(SOtable, , `:=`(testInt, as.double(testInt)),  : 
## Type of RHS ('double') must match LHS ('integer'). To check and coerce would impact performance too much for the fastest cases. Either change the type of the target column, or coerce the RHS of := yourself (e.g. by using 1L instead of 1)
SOtable[,testInt := as.double(testInt)]

Причина, по которой я попробовал это, заключается в том, что я хотел выполнить некоторые манипуляции со столбцом в большой таблице данных для каждой строки, но как только я использую by, я получаю ошибку LHS/RHS. Но пока я это печатаю, я думаю: "Может быть, мне стоило использовать для этого какую-нибудь функцию apply?"

08.01.2015

  • В вашем первом примере: скажем, для первой группы вы превращаете testInt в двойную переменную. Во второй группе вы ожидаете, что это будет целочисленная переменная, которую вы хотите превратить в двойную. Это означает, что одна и та же переменная должна иметь два режима. Это невозможно. data.table на самом деле не split данные для by операций. 08.01.2015
  • Ааа @Roland, поэтому, когда я делаю это с by, он пытается записать каждый отдельный ответ в data.table один за другим (записывая двойное число, в то время как остальные все еще являются целыми числами), и он не создает сначала целый новый столбец, с которым можно заменить старую колонку. Это имеет смысл! 09.01.2015
  • @Gullydwarf := работает по ссылке, т. е. изменяется на месте. 10.01.2015

Ответы:


1

Ответ @Roland:

В первом примере вы заменяете весь столбец, поэтому тип переменной не имеет значения. При использовании by каждое значение записывается в столбец при вычислении, поэтому, если типы различаются, он попытается записать (в данном случае) двойную переменную в целочисленный столбец, что не сработает.

20.01.2015
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: wedx@cp9.ru