如何在嵌套列表中查找NULL

时间:2019-02-28 07:27:54

标签: r

摘要:

在下载财务数据(OHLC)期间,有时会获得嵌入在“列表中的列表”中的NULL值,如下面的代码所述。

当出现NULL时,则认为需要删除数据行(OHLC)。“列表中的列表”将在稍后阶段移至数据帧并转换为xts。如果列表中出现NULL,则由于抱怨列表中对象数量不同,移至数据框和xts将会失败。

需要:

我需要能够找到所有NULL并通过它们的位置(哪个列表?)来识别它们。然后,基于标识,我将删除相同位置的所有值,例如。如果mylist $ high [1]中存在NULL,那么我将删除:

mylist$open[1]
mylist$high[1]
mylist$low[1]
mylist$close[1]

其他观察结果:

请注意,在以下情况下,信息i仍为列表格式,因此还没有数据帧和xts中存在的数据行。

在不属于列表的变量中识别NULL可以正常工作,如下面的代码所述。

我的R码:

# NULL in lists.
open  <- list(1, 2, 3)
high  <- list(1, 2, 3)
low   <- list(1, 2, 3)
close <- list(1, 2, 3)

mylist <- list(
  open  = open,
  high  = high,
  low   = low,
  close = close
)

mylist$high[1] <- list(NULL) # Adding null (for test purpose).

ls.str(mylist)

is.null(mylist$high[[1]]) # Returns zero length, correct.
length(mylist$high[[1]])  # Returns true, correct

# NULL in variable.
c <- NULL
 length(c)  # Returns zero length, correct.
 is.null(c) # Returns true, correct

结果如下:

> ls.str(mylist)
close : List of 3
 $ : num 1
 $ : num 2
 $ : num 3
high : List of 3
 $ : NULL
 $ : num 2
 $ : num 3
low : List of 3
 $ : num 1
 $ : num 2
 $ : num 3
open : List of 3
 $ : num 1
 $ : num 2
 $ : num 3

处理所需职位后的外观:

(每个列表(打开,高,低,关闭)中位置为[1]的所有值都是 删除)

> ls.str(mylist)
close : List of 2
 $ : num 2
 $ : num 3
high : List of 2
 $ : num 2
 $ : num 3
low : List of 2
 $ : num 2
 $ : num 3
open : List of 2
 $ : num 2
 $ : num 3

0 个答案:

没有答案