如何检查列表的每个元素是否都有名称?

时间:2016-11-30 05:35:33

标签: r list

我想要一个函数is_named_list(lst),如果列表中的所有元素都有名称,则返回true,否则返回false。在列表为空的情况下,它应该返回false。在尝试编写这样的函数时,我需要考虑哪些因素。例如,对于names函数,没有名称的列表与名称不完整的列表的行为不同:

> tmp_list <- list(a = 1, b = 2, 3)
> names(tmp_list)
[1] "a" "b" "" # empty string for unnamed third element

> tmp_list <- list(1, 2, 3)
> names(tmp_list)
NULL # null value when no elements have names.

3 个答案:

答案 0 :(得分:3)

只需将列表的长度(length(tmp_list))与该列表的名称向量的长度(length(names(tmp_list)))进行比较,其中名称​​不为空字符串。

all_names <- function(list) {
    return(length(list) == sum(names(list) != "", na.rm=TRUE))
}

> all_names(tmp_list)
[1] FALSE

答案 1 :(得分:0)

我们可以尝试

is_named_list <- function(lst) {
    !(is.null(names(lst))|any(!nzchar(names(lst))))
 }
is_named_list(tmp_list) 
#[1] FALSE

和第二个例子

tmp_list <- list(1, 2, 3)
is_named_list(tmp_list)
#[1] FALSE

答案 2 :(得分:0)

awk -v OFS="\t" 'BEGIN{print "ID\tcol1\tcol2"}NR>1{print (NR-1),$1,$2}' inputfile
ID      col1    col2
1       t       y
2       g       h
3       g       k
4       j       o