Я думаю, что ваш единственный путь, или аналогичным образом я бы сделал dt[i == 1 & j == 1, a[[1]] ]
.
Вы можете написать вспомогательную функцию, например
get_a = function(ii,jj) dt[.(ii,jj), on=.(i,j), mult="first", a[[1]]]
, но можете сожалеть об этом, если вы когда-нибудь напишите подмножество, которое соответствует 0 или 2+ строкам таблицы:
get_a(1,1) # works as expected
get_a(1,4) # returns NULL
get_a(1,1:2) # returns only (1,1)
Если вы хотите избежать этого, можете добавить проверки на основе .N
...
get_listcol = function(..., d, list_col, join_cols = names(list(...)), mult = FALSE){
d[list(...), on=join_cols, nomatch=0, {
if (.N == 0L){
stop("No matches found.")
} else if (.N == 1L){
.SD[[1]][[1]]
} else {
if (mult){
.SD[[1]]
} else {
stop("Multiple matches found.")
}
}
}, .SDcols=list_col]
}
# usage
get_a2 = function(ii, jj) get_listcol(i = ii, j = jj, d = dt, list_col = "a")
get_a2(1,1) # works as expected
get_a2(1,4) # error
get_a2(1,1:2) # error