我正在尝试遵循良好的做法并使用它vapply()
而不是sapply()
内部函数,但是vapply()
在想要固定长度时发现类型检查过于僵硬。
假设我想要这样的东西:
list1 <- list(l1_one = 1:3, l1_two = letters[1:3])
list2 <- list(l2_one = 4:6, l2_two = letters[4:6], l2_three = 10:12)
list_12 <- list(list1, list2)
sapply(list_12, names)
# [[1]]
# [1] "l1_one" "l1_two"
#
# [[2]]
# [1] "l2_one" "l2_two" "l2_three"
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以允许可变长度,但是要检查返回值是否为“字符”模式,并且长度至少为一个?显然这不起作用:
vapply(list_12, names, character(2))
# Error in vapply(list_12, names, character(2)) : values must be length 2,
# but FUN(X[[2]]) result is length 3
Run Code Online (Sandbox Code Playgroud)
sapply
不安全,因为它的返回类型不稳定。如果您知道返回类型,则可以安全地使用vapply
. 如果没有,就像您的情况一样,只需使用lapply
即可。
对于你的例子:
list1 <- list(l1_one = 1:3, l1_two = letters[1:3])
list2 <- list(l2_one = 4:6, l2_two = letters[4:6], l2_three = 10:12)
list_12 <- list(list1, list2)
lapply(list_12, names) # always list() return type
Run Code Online (Sandbox Code Playgroud)