salaries <- list(leaders = c(250, 200), assistant = 100, members = c(300, 200, 180, 120, 100))
> vapply(salaries, range, c(min=0, max=0))
leaders assistant members
min 200 100 100
max 250 100 300
在这个脚本中,无论最小值和最大值如何,结果总是相同的,所以我想知道“=0”在这里意味着什么。
附注我对 Rstudio 编码非常陌生。请原谅。
我尝试过的。
> vapply(salaries, range, c(min=0.1, max=1))
leaders assistant members
min 200 100 100
max 250 100 300
> vapply(salaries, range, c(min=2, max=1))
leaders assistant members
min 200 100 100
max 250 100 300
> vapply(salaries, range, c(min=1000, max=1000))
leaders assistant members
min 200 100 100
max 250 100 300
了解
vapply
的第三个参数的实际含义。
考虑这个
for
循环。为了有效地编码,我们预先分配内存,即我们创建一个空的数值数组m
(又名矩阵),稍后填充。 m
将根据长度为 range
的 2
函数的输出来确定行数,并根据我们将循环的对象的长度来确定列数,length(salaries)
。
> m <- array(0, dim=c(2, length(salaries)), dimnames=list(NULL, names(salaries)))
> for (i in seq_along(salaries)) {
+ m[, i] <- range(salaries[i])
+ }
> m
leaders assistant members
[1,] 200 100 100
[2,] 250 100 300
由于
vapply
自动检测 length(salaries)
,我们只需要指定 range
函数输出的类型和长度,这正是我们在第三个参数中所做的。
> vapply(X=salaries, FUN=range, FUN.VALUE=numeric(2L))
leaders assistant members
[1,] 200 100 100
[2,] 250 100 300