vapply()可以与可变长度的FUN.VALUE一起使用吗?

Ken*_*oit 6 r sapply

我正在尝试遵循良好的做法并使用它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)

And*_*erg 0

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)