Назначение функции во время поднабора data.table - PullRequest
1 голос
/ 28 мая 2019

Есть ли конкретная причина, по которой нельзя выполнить следующее действие?

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) ]

Ответы [ 2 ]

1 голос
/ 28 мая 2019

При назначении столбцам списка эмпирическое правило в data.table гласит: «вам всегда нужно на list() больше, чем вы ожидаете»

v[ A == 1, B := list(list(identity)) ]

делает что хочешь. Ваш пример с целочисленным значением сработал, потому что в этом случае data.table автоматически приводит 2 к list(2) (но с указанным вами предупреждением).

1 голос
/ 28 мая 2019

Мы можем обернуть функцию в list, так как это функция

v[A == 1,  B := list(list(identity))]
v
#   A          B
#1: 1 <function>
#2: 2           
...