使用下面的代码我尝试返回向量矢量的最大值和最小值:
v <- 1:5
v2 = list(v , v)
o <- lapply(v2 , function(x) c(max = max(v2) , min = min(v2)))
o
v2包含两个元素1-5的向量。
每个函数的最大值和最小值应用10次(v2的内部向量的组合大小)
> o
[[1]]
max min
5 1
[[2]]
max min
5 1
[[3]]
max min
5 1
[[4]]
max min
5 1
[[5]]
max min
5 1
[[6]]
max min
5 1
[[7]]
max min
5 1
[[8]]
max min
5 1
[[9]]
max min
5 1
[[10]]
max min
5 1
是否可以修改apply函数,以便只返回包含max和min值的列表一次而不是多次?
答案 0 :(得分:1)
从概念上讲,lapply
将其第一个参数视为一系列东西,它将迭代以应用函数(为什么没有故意定义,实际上和你一样)。
这意味着x
实际上代表了连续传递给定义函数的对象。因此
> lapply(v2 , function(x) c(max = max(x) , min = min(x)))
[[1]]
max min
5 1
[[2]]
max min
5 1
完成这项工作。
<小时/> 为了使事情更清楚,让我们以更分解的方式做到这一点。让我们首先定义一个函数,然后将其用作lapply
的第二个参数。
> myfn <- function(x) c(max = max(x) , min = min(x))
我们将callable存储在名为myfn
的变量中。让我们使用它
> myfn(1:5)
max min
5 1
或者让我们使用lapply
来完成它,它会在上面对给定对象的每个元素(例如v3
:
> v3 = list(1:5 , 15:20)
> lapply(v3 , myfn)
[[1]]
max min
5 1
[[2]]
max min
20 15