【发布时间】:2019-01-10 11:03:13
【问题描述】:
我并没有真正理解 vapply 中的 FUN.VALUE 参数。
这是我的例子:
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 会有这种行为的任何提示?
【问题讨论】:
-
但是,长度给出了一个数字。您可以使用
vapply(a, length, FUN.VALUE= numeric(1))或vapply(a, length, FUN.VALUE= integer(1))但它会给出vapply(a, length, FUN.VALUE= character(1))的错误这里括号内的数字表示每个循环的预期输出长度 -
关于为
FUN.VALUE使用单个数值,我认为它将其解析为数字而不是长度。即您可以传递任何数字vapply(a, length, FUN.VALUE= 0)以获得相同的输出。但是,如果你将它作为字符串传递,它会感知character输出vapply(a, length, FUN.VALUE= "0")并给出错误 -
对于
vapply,您需要在括号中定义类型(整数、字符、逻辑)AND 长度,如@akrun 显示的是否强制。但是传递一个数字很有趣,它起作用了。我想知道这是否适用于矩阵/数组返回等其他方法。去实验室! -
好吧,我想,git吧,问函数返回的类型和长度;谢谢!