Создание новой таблицы данных для каждой строки существующей таблицы данных R, избегая проблем с вектором памяти - PullRequest
0 голосов
/ 27 мая 2018

Предположим, у меня есть две таблицы данных:

library(data.table)
A=data.table(w=1:3,d=5:7)
B=data.table(K=2:4,m=9:11)


> A
   w d
1: 1 5
2: 2 6
3: 3 7
> B
   K  m
1: 2  9
2: 3 10
3: 4 11

Я хочу сделать следующее расширение, где у меня есть новый B для каждой строки A:

C=A[,B[],by=names(A)]

   w d K  m
1: 1 5 2  9
2: 1 5 3 10
3: 1 5 4 11
4: 2 6 2  9
5: 2 6 3 10
6: 2 6 4 11
7: 3 7 2  9
8: 3 7 3 10
9: 3 7 4 11

Однако,когда я делаю это с моими реальными данными, я получаю эту ошибку:

Error in `[.data.table`(A, , B[], by = names(A)) : 
  negative length vectors are not allowed

Оказывается, это ошибка памяти.Тем не менее, я думаю, что должен быть способ сделать это без циклов, память не является проблемой на моем сервере до 50 ГБ оперативной памяти, которая в следующей таблице данных, безусловно, будет меньше, чем.

Кто-нибудь знаетэффективный способ сделать это?

1 Ответ

0 голосов
/ 01 июня 2018

Хакерский способ справиться с этим может заключаться в добавлении идентичного вспомогательного столбца в каждую таблицу и последующем разрешении декартовых объединений:

library(data.table)
A = data.table(w = 1:3, d = 5:7)
B = data.table(K = 2:4, m = 9:11)

A[, j := 1]
B[, j := 1]

C = A[B, on = 'j', allow.cartesian = T]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...