У меня есть таблица данных с неоднородными ключами:Регистрация с неоднородными ключами, уникальными в я
> dput(sv)
structure(list(kwd = c("a", "a", "b", "b", "c"), pixel = c(1,
2, 1, 2, 2), kpN = c(2L, 2L, 2L, 1L, 1L)), row.names = c(NA,
-5L), class = c("data.table", "data.frame"), .Names = c("kwd",
"pixel", "kpN"), .internal.selfref = <pointer: 0x7fc4aa800778>, sorted = "kwd")
> dput(kwd)
structure(list(kwd = c("a", "b", "c", "z"), kwdN = c(3L, 2L,
1L, 1L)), row.names = c(NA, -4L), class = c("data.table", "data.frame"
), .Names = c("kwd", "kwdN"), .internal.selfref = <pointer: 0x7fc4aa800778>, sorted = "kwd")
почему я получаю эту ошибку:
> sv[kwd,kwdN:=kwdN]
Starting bmerge ...done in 0 secs
Error in vecseq(f__, len__, if (allow.cartesian || notjoin) NULL else as.integer(max(nrow(x), :
Join results in 6 rows; more than 5 = max(nrow(x),nrow(i)). Check for duplicate key values in i, each of which join to the same group in x over and over again. If that's ok, try including `j` and dropping `by` (by-without-by) so that j runs for each group to avoid the large allocation. If you are sure you wish to proceed, rerun with allow.cartesian=TRUE. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and datatable-help for advice.
Calls: [ -> [.data.table -> vecseq
я ожидал что-то подобное (обратите внимание, что ключи:.
kwd pixel kpN kwdN
1: a 1 2 3
2: a 2 2 3
3: b 1 2 2
4: b 2 1 2
5: c 2 1 1
Кроме того, я уверен, что он работал, как, что до
Это что-то, что изменилось в data.table 1.9.4
?
Как мне получить то, что я хочу? (kwd[sv]
, кажется, работает, является то, что новый путь?)
Попробуйте 'sv [kwd, kwdN: = i.kwdN]' – akrun
Ошибка 'allow.cartesian' не должна появляться здесь. Это было зафиксировано в 1.9.5. Контрольная точка 8 в исправлении ошибок для 1.9.5 [здесь] (https://github.com/Rdatatable/data.table/blob/master/README.md). Если 'i' имеет дубликаты, то, как уже сказано в сообщении об ошибке, вы должны использовать' allow.cartesian = TRUE'. – Arun
@Arun: У меня 1.9.4 – sds