在 ifelse R data.table 中使用 apply

Oli*_*ver 3 r function list data.table

我有以下data.table对象:

USER    active  rate   day    # of elements by hour
4q7C0o  1         1.48  1       c(0, 0, 0, 0, 0, 0, 5, 98, 167, 211, 246)
2BrKY63 1         0.5   3       c(0, 0, 0, 0, 0, 0, 0, 5, 15, 24, 89, 187) 
3drUy6I 1         2.58  5       c(0, 0, 0, 0, 0, 0, 0, 0, 1, 112, 265, 309) 
G5ALtO  1         1.1   7       c(0, 0, 0, 0, 0, 0, 0, 2, 20, 153, 170)

Run Code Online (Sandbox Code Playgroud)

其中列的每个元素# of elements by hour都是一个长度不同的列表。我想将该函数pexp()应用于每个列表的每个元素(例如 pexp(0, rate = 1.48) 到第一个列表的第一个元素, pexp(246, rate = 1.48) 到第一个列表的最后一个元素)如果出现小于 'x' 的值,则它会显示在新列中。就像是 :

DT[, ifelse(any(lapply( of elements by hour, pexp, rate = rate) < x), 'no.usable','usable' )  ,]
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何在data.table.

Mic*_*ico 6

pexp是指数密度,它是单调且容易可逆的。如果满足以下条件,则满足比率 l 的条件:

# elem > 1 / rate * log(rate / x)
Run Code Online (Sandbox Code Playgroud)

因此,我们只需要查看每个列表的最大数量并检查那里的条件。

考虑到这一点,我们可以这样做:

DT[ , fifelse(sapply(`# elem`, max) > 1/rate*log(rate/x), 'no.usable', 'usable')]
Run Code Online (Sandbox Code Playgroud)