2016-02-18 9 views
0

моих данных:экстракт максимальное и минимальное значение из контура

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 

от г, как извлечь максимальное значение и минимальное значение всех итерации цикла вместе {мин (г), не более (г)} ?? мой результат будет выглядеть следующим образом

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

Это просто пример моей цели - минимальное значение и максимальное значение. – user5934339

ответ

2

Вы можете использовать

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

Конечно, вы можете также вы min или max вместо range который просто возвращает оба.

Что касается вашего подхода к петле, вы должны заметить, что вы переписываете z на каждой итерации цикла, поэтому после того, как цикл завершен, он содержит только результаты последнего прогона.

Если вы хотите сделать это в течение петли, вы должны создать переменную для хранения результатов в:

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 
+0

docendo discimus \t Я ценю ваш ответ, но если я вычитаю x таким образом 'z = abs (sweep (x, 2, p [, i], '-'))' – user5934339

+0

@ user5934339, то что? Я не понимаю ваш комментарий, пожалуйста, уточните. –

+0

'для (i в 1: 2) { z = abs (развертка (x, 2, p [, i], '-')) print (z)}' max = 70, min = 0 – user5934339

Смежные вопросы