R 如何提取列表中的第一项(即使列表为空)
在R中,我想从嵌套列表中提取第一项;但是,有时列表可能是空的 e、 g: 第一次调用返回一个有效的子列表(R 如何提取列表中的第一项(即使列表为空),r,R,在R中,我想从嵌套列表中提取第一项;但是,有时列表可能是空的 e、 g: 第一次调用返回一个有效的子列表(ID=1,Sales=1000,Product=“Car”),但第二次调用返回一个错误- myList2[[1]]中的错误:下标超出范围 有没有一个简单的调用,我可以说“在填充列表时返回项1,否则返回NULL并且不要抛出错误”如果长度为0,我们可以创建一个函数返回NULL,或者返回列表的子集 f1 <- function(lst, ind){ if(length(lst) >
ID=1
,Sales=1000
,Product=“Car”
),但第二次调用返回一个错误-
myList2[[1]]中的错误:下标超出范围
有没有一个简单的调用,我可以说“在填充列表时返回项1,否则返回
NULL
并且不要抛出错误”如果长度为0,我们可以创建一个函数返回NULL
,或者返回列表的子集
f1 <- function(lst, ind){
if(length(lst) >=1) lst[[ind]] else NULL
}
f1(myList2, 1)
#NULL
f1(myList, 1)
#$ID
#[1] 1
#$Sales
#[1] 1000
#$Product
#[1] "Car"
f1=1)lst[[ind]]否则为空
}
f1(myList2,1)
#空的
f1(myList,1)
#$ID
#[1] 1
#美元销售额
#[1] 1000
#$Product
#[1] “汽车”
您可以使用tryCatch
,以便在出现错误时为其提供一个替代方案,即
f1 <- function(x){
tryCatch(x, error = function(i)return(NULL))
}
f1(myList[[1]])
#$ID
#[1] 1
#$Sales
#[1] 1000
#$Product
#[1] "Car"
f1(myList2[[1]])
#NULL
f1您可以使用[1]
和el()
或[[1]]
获得结果<代码>[1]
返回仅包含第一个元素的列表。它在空列表中返回NULL
。然后您必须使用el()
ir[[1]]
提取此列表中的唯一元素
参见示例
myList1 <- list(
list(ID = 1, Sales = 1000, Product = "Car"),
list(ID = 2, Sales = 2000, Product = "Boat"),
list(ID = 3, Sales = 1500, Product = "Bike")
)
myList2 <- list()
el(myList1[1])
el(myList2[1])
myList1[1][[1]]
myList2[1][[1]]
您可以使用dplyr
软件包的first
功能:
first(myList, default = NULL)
first(myList2, default = NULL)
有关该函数的更多信息,请单击此处:是否提取“ID”或仅提取列表
元素您的mylist2
是一个空列表。整个列表
元素。但是我想避免示例2中的错误消息,当列表有0个元素时(在我正在处理的项目中,这些列表来自一个JSON对象,该对象有时返回填充列表,有时返回空列表-我试图确保后者不会导致错误)Yesmylist2
为空。因此,我想确保当我请求列表中的第一个[[1]]
项时,我只得到NULL
returned考虑使用pairlist()
,它将在空时返回NULL
pairlist()[[1]]
将返回看起来合理的NULL
;希望有一个已经可用的函数可以处理这个问题,而不必编写定制的函数!:-)尽管我更喜欢akrun的答案,因为它专门测试所讨论的场景,而不是在错误发生时隐式地捕获它,但这同样有效。
myList1 <- list(
list(ID = 1, Sales = 1000, Product = "Car"),
list(ID = 2, Sales = 2000, Product = "Boat"),
list(ID = 3, Sales = 1500, Product = "Bike")
)
myList2 <- list()
el(myList1[1])
el(myList2[1])
myList1[1][[1]]
myList2[1][[1]]
> el(myList1[1])
$ID
[1] 1
$Sales
[1] 1000
$Product
[1] "Car"
> el(myList2[1])
NULL
first(myList, default = NULL)
first(myList2, default = NULL)