使用apply计算向量列表的最大值和最小值

时间:2017-11-25 15:47:02

标签: r

使用下面的代码我尝试返回向量矢量的最大值和最小值:

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值的列表一次而不是多次?

1 个答案:

答案 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