vapply中的FUN.VALUE参数

问题描述 投票:6回答:1

我真的没有在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这样做的任何提示?

r list apply
1个回答
3
投票

来自vapply文档,

FUN.VALUE(广义)向量;来自FUN的返回值的模板。查看详细信息'。

请注意,它表示“返回值的模板”,而不是“描述返回值的字符串”。查看详细信息部分提供了更多指导:

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

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

它继续:

(类型可以在排序逻辑<integer <double <complex中提升为更高类型,但不能降级。)

所以,如果你是vapplying一个可能返回一个整数或双精度值的函数,你应该确保指定像FUN.VALUE = 1.0这样的东西

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

© www.soinside.com 2019 - 2024. All rights reserved.