如何从列表列表中提取第二个值并将NA赋予没有第二个值的列表?

时间:2019-05-09 21:41:07

标签: r lapply

我想从列表中提取第一个和第二个值。我能够毫无问题地提取第一个值。但是,当我尝试提取第二个值时,它给我一个错误,因为并非suggestion列中的所有列表都具有多个值。如何从suggestion的{​​{1}}列中提取第二个值,并为那些没有第二个值的人生成NA?

下面是我为获得第一个建议而编写的代码,但是当我这样做时

mydf_1

它给出此错误: mydf_1$second_suggestion <- lapply(mydf_1$suggestion, `[[`, 2)

谢谢。

Error in FUN(X[[i]], ...) : subscript out of bounds

1 个答案:

答案 0 :(得分:0)

在尝试提取感兴趣的元素之前,您可以先检查每个列表的长度。另外,我建议使用sapply,以便返回一个字符向量,而不是另一个列表。

第一个建议:

index <- 1
sapply(mydf_1$suggestion, function(x) {if(length(x) < index) {NA} else {x[[index]]}})

对于第二个建议,依此类推:

index <- 2
sapply(mydf_1$suggestion, function(x) {if(length(x) < index) {NA} else {x[[index]]}})

如果您需要自动化的话,可以用更多的代码将其包装到更大的函数中。

从理论上讲,您可以使用is.null(请参阅How to test if list element exists?)进行测试,但是尝试该方法仍然遇到相同的错误。