当子列表为整数0

时间:2016-02-24 17:53:11

标签: r data.table

我有一个包含许多子列表的大型列表,每个子列表都由一个值向量组成。在此列表中,我的目标是应用快速扩展网格cJ的形式,但是当遇到其中一个产生整数零的列表时,该函数将失败。我的问题是如何根据所有产生整数零的子列表转换Z转换为可以提交给下面函数的类。我知道我可以使用长度(Z [[4])但我的目标是有一个方法可以用于列表,可能包括数千行,其中一些可能是整数0,所以我的目标是转换为Z任何可能列出的整数。

Z <- list (c(1,2,3,4,3,2,1,2),c(1,2,3,4),c(5,6,4),c(integer(0))) 
do.call ( CJ , args = Z )  # get all combinations

我的问题是,是否有任何方法可以将整个Z的类更改为成功分析数据以使函数正常工作而不会产生错误。

# Desired Output will be equal to having the last list with a numeric 0 so it will be represented in the fast expand.grid. 
Z <- list (c(1,2,3,4,3,2,1,2),c(1,2,3,4),c(5,6,4),c((0)))
do.call(CJ,Z)

1 个答案:

答案 0 :(得分:1)

CJ函数来自data.table,因此有必要将该标记添加到问题中。

有一个open FR to create CJ generic method,所以它可以单独处理不同的类型 在解决问题的函数下面。

library(data.table)
f = function(x){
    stopifnot(is.list(x))
    ll = sapply(x, length)
    if(any(ll == 0L)) x[ll == 0L] = 0L
    do.call(CJ, args = x)
}
x = list(c(1,2,3,4,3,2,1,2),c(1,2,3,4),c(5,6,4),c(integer(0)))
f(x)