[R] delete data row
David Winsemius
dwinsemius at comcast.net
Mon Oct 18 01:38:35 CEST 2010
On Oct 17, 2010, at 3:56 PM, William Dunlap wrote:
>
>> I had been thinking of:
>>> x <- c(1, (2^(0.5))^2 , 3, 5, (2^(0.5))^2 , 3, 1)
>>> y <- 2
>>> x[-which(zapsmall(x-y) == 0)]
>> [1] 1 3 5 3 1
>
> Using which() to convert logicals into integer
> subscripts is almost always unnecessary and often wrong.
At one time I believed that too. However, in the situation where the
test produces NA rather than a numeric value when one is indexing in
the first argument. I have had the unpleasant experience of pages if
useless and frustrating to understand output because of this "feature".
I learned to either use which() in the first argument to "[" or to use
subset to avoid inadvertent "returns" from logical indexing.
> x <- 1:10
> y <- log(x-5)
Warning message:
In log(x - 5) : NaNs produced
> x[y>-Inf]
[1] NA NA NA NA 6 7 8 9 10
> x[which(y>-Inf)]
[1] 6 7 8 9 10
If that test were used in a dataframe indexing, the entire line might
come back as a "result".
> In this case it fails when no x is close to y,
> because integer(0) is the same thing as -integer(0):
>
>> x[-which(zapsmall(x-10) == 0)]
> numeric(0)
>
> The whichless version, using logical subscripts,
> works (in this case we want all of x):
>
>> x[zapsmall(x-10)!=0]
> [1] 1 2 3 5 2 3 1
Maybe the rule should be don't use the -which construction:
> x <- c(1, (2^(0.5))^2 , 3, 5, (2^(0.5))^2 , 3, 1)
> y <- 2
> x[which(zapsmall(x-10) != 0)]
[1] 1 2 3 5 2 3 1
--
David.
>
> When using logicals as subscripts, read the "["
> as "such that".
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
More information about the R-help
mailing list