Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从循环中提取最大值和最小值_R - Fatal编程技术网

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

R 从循环中提取最大值和最小值,r,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 -1

我的数据是:

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
你可以用

range(sapply(as.data.frame(p), "-", unlist(x)) * -1)
#[1] -26  70
当然,您也可以选择
min
max
而不是
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
你可以用

range(sapply(as.data.frame(p), "-", unlist(x)) * -1)
#[1] -26  70
当然,您也可以选择
min
max
而不是
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

我很感激你的回答,但是如果我用这种方法减去x,那又怎么样呢?我不理解你的评论,请详细说明。
for(I in 1:2){z=abs(sweep(x,2,p[,I],'-'))print(z)}
max=70,min=0@user5934339,这仍然在覆盖z。看到我的最新答案我很感激你的回答,但是如果我用这种方法减去x
z=abs(sweep(x,2,p[,I],'-'))
@user5934339,那又怎么样?我不理解你的评论,请详细说明。
for(I in 1:2){z=abs(sweep(x,2,p[,I],'-'))print(z)}
max=70,min=0@user5934339,这仍然在覆盖z。我的目标是最小值和最大值。我的目标是最小值和最大值。