我的数据是:
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
答案 0 :(得分:2)
您可以使用
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
然后,您可以unlist
并使用range
或其他功能..
range(unlist(z))
#[1] -26 70