Есть ли конкретная причина, по которой нельзя выполнить следующее действие?
v <- data.table( A = 1:2, B = vector("list", 2) )
# A B
# 1: 1
# 2: 2
v[ A == 1, B := list( identity ) ]
# RHS of assignment is not NULL, not an an atomic vector (see ?is.atomic) and not a list column.
Обратите внимание, что B
является столбец списка. С другой стороны, возможно следующее (хотя и с предупреждением):
v[ A == 1, B := list(2) ]
обновите свою таблицу данных, и она будет работать
Мы можем обернуть функцию в list
, так как это функция
v[A == 1, B := list(list(identity))]
v
# A B
#1: 1 <function>
#2: 2
Отлично, я ожидал, что list(identity)
будет добавлено в столбец B
.
При назначении столбцов списка эмпирическое правило в data.table
гласит: «вам всегда нужно на list()
больше, чем вы ожидаете».
v[ A == 1, B := list(list(identity)) ]
делает то, что вы хотите. Ваш пример с целочисленным значением работал, потому что в этом случае data.table
автоматически приводит 2
к list(2)
(но с предупреждением, как вы сказали).
Я вижу, хотя это не совсем согласуется, например. синтаксис v <- data.table( A = 1:2, B = list( identity, c) )
Согласованность @FOMH теперь улучшена в последней версии
identity
это функция