# RE: [R] problems with subset (misunderstanding somewhere)

From: Ted Harding <Ted.Harding_at_nessie.mcc.ac.uk>
Date: Tue 05 Apr 2005 - 23:29:22 EST

> Dear r-help,
>
> I have the following function defined:
>
> cubic.distance<-function(x1,y1,z1,x2,y2,z2) {
> max(c(abs(x1-x2),abs(y1-y2),abs(z1-z2)))
> }
>
> I have a data frame from which I make subsets.
>
> When I call
> subset(dataframe,cubic.distance(tb19h,tb37v,tb19v,190,210,227)<=2)
> I have the result with 0 rows.
>
> However, the data frame contains the row (among others, that suit)
> tb19v tb19h tb37v
> 226.6 189.3 208.4

Did you test the function cubic.distance? As written, I think it will always return a single value, since max() returns the maximum of *all* the values, not by rows (even if you use cbind() rather than c()).

If yor redefine the function as

cubic.distance<-function(x1,y1,z1,x2,y2,z2) {   apply(cbind(abs(x1-x2),abs(y1-y2),abs(z1-z2)),1,max) }

I think you will find it does what you want (if I have understood your problem correctly).

Example (with the function defined as above):

``` x<-cbind(rnorm(10,190,1),rnorm(10,210,1),rnorm(10,227,1))
x<-cbind(rnorm(10,190,2),rnorm(10,210,2),rnorm(10,227,2))
colnames(x)<-c("tb19h","tb37v","tb19v")
```
x.df<-as.data.frame(x)
(cubic.distance(x.df\$tb19h,x.df\$tb37v,x.df\$tb19v,190,210,227)<=2) #[1] FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE  subset(x.df,cubic.distance(tb19h,tb37v,tb19v,190,210,227)<=2)
```#      tb19h    tb37v    tb19v
#3  189.3930 211.4345 226.3436
#4  189.4521 208.8493 228.0324
#9  188.2441 210.4914 226.4521
#10 191.4781 211.5234 226.1837

```

With your definition, you would have got the *single" result FALSE, since there is at least one case where the distance > 2, so the max > 2, so the subset criterion evaluates to FALSE, so no rows are selected.

Hoping this helps,
Ted.

E-Mail: (Ted Harding) <Ted.Harding@nessie.mcc.ac.uk> Fax-to-email: +44 (0)870 094 0861
```Date: 05-Apr-05                                       Time: 14:29:22
------------------------------ XFMail ------------------------------

______________________________________________
```
R-help@stat.math.ethz.ch mailing list