vapply中的FUN.VALUE参数

时间:2018-08-02 15:44:36

标签: r list apply

我在FUN.VALUE中并没有真正得到vapply参数。 这是我的示例:

a = list(list(1,2), list(1), list(1,2,3))

# give the lengths of each list in a
sapply(a, length)

现在,我尝试使用vapply而不是sapply使其类型安全

# gives me same result as sapply
vapply(a, length, FUN.VALUE=1)

# same result, but why?
vapply(a, length, FUN.VALUE=1000)

# gives me error
vapply(a, length, FUN.VALUE="integer")

# gives me error
vapply(a, length, FUN.VALUE="vector")

# gives me error
vapply(a, length, FUN.VALUE=c(1,2))

?vapply中我读到FUN.VALUE可以是标量,向量或矩阵,并且用于匹配输出的类型。为什么vapply这样行事的任何提示?

1 个答案:

答案 0 :(得分:3)

vapply文档中,

  

FUN.VALUE(广义)向量; FUN返回值的模板。请参阅“详细信息”。

请注意,它说的是“返回值的模板”,而不是“描述返回值的字符串”。在 Details 部分中查看可提供更多指导:

  

此函数检查FUN的所有值是否与FUN.VALUE兼容,必须具有相同的长度和类型。 [已加强调]

示例中的函数length()返回一个长度为1的数字(如果要具体说明,则为整数)。使用FUN.VALUE = 1时,1的长度和类型与您期望的输出相同,因此检查通过。当您使用FUN.VALUE = "integer"时,"integer"是长度为1的字符向量,因此长度检查通过,但类型检查失败。

它继续:

  

(类型可以在逻辑<整数

因此,如果您vapply正在使用一个可能返回整数或双精度值的函数,则应确保指定类似FUN.VALUE = 1.0

的值。

文档继续讨论如何处理数组/矩阵。我不会在这里复制/粘贴它。