从循环中提取最大值和最小值

时间:2016-02-18 13:08:17

标签: r

我的数据是:

x1=c(55,60,75,80)
x2=c(30,20,15,23)
x3=c(4,3,2,6)
x=data.frame(x1,x2,x3)
a=c(10,20,30)
b=c(25,10,15)
p=cbind(a,b)

for (i in 1:2) {
z=x-p[,i]
print(z) }


 x1  x2  x3
1 45  10 -26
2 40 -10  -7
3 45   5 -18
4 70   3 -24
  x1  x2  x3
1 30  20 -11
2 50   5 -22
3 60 -10  -8
4 55  13  -9

从z如何提取循环的所有迭代的最大值和最小值{min(z),max(z)} ??我的结果将是这样的

min(z)=-26
max(z)=70

1 个答案:

答案 0 :(得分:2)

您可以使用

range(sapply(as.data.frame(p), "-", unlist(x)) * -1)
#[1] -26  70

当然,您也可以minmax代替range而只返回两者。

关于你的for循环方法,你应该注意到你在循环的每次迭代中都覆盖z所以在循环完成之后,它只保存最后一次运行的结果。

如果你想在for循环中进行,你必须创建一个变量来存储结果:

z <- vector("list", length = 2)
for (i in 1:2) {
    z[[i]]=x-p[,i]
}
> z
#[[1]]
#  x1  x2  x3
#1 45  10 -26
#2 40 -10  -7
#3 45   5 -18
#4 70   3 -24
#
#[[2]]
#  x1  x2  x3
#1 30  20 -11
#2 50   5 -22
#3 60 -10  -8
#4 55  13  -9

然后,您可以unlist并使用range或其他功能..

range(unlist(z))
#[1] -26  70