Re: [R] xmat[1, 2:3] <- NULL

From: Marc Schwartz (via MN) <mschwartz_at_mn.rr.com>
Date: Fri 08 Jul 2005 - 03:38:38 EST

On Thu, 2005-07-07 at 10:20 -0700, Mikkel Grum wrote:
> I have a situation where I'm filling out a dataframe
> from a database. Sometimes the database query doesn't
> get anything, so I end up trying to place NULL in the
> dataframe like below.
>
> > temp <- NULL
> > xmat <- as.data.frame(matrix(NA, 2, 3))
> > xmat[1, 2:3] <- temp
> Error in if (m < n * p && (n * p)%%m)
> stop(gettextf("replacement has %d items, need %d", :
> missing value where TRUE/FALSE needed
>
> I can't get the programme to accept that sometimes
> what the query looks for just doesn't exist, and I
> just want to move on to the next calculation leaving
> the dataframe with a missing value in the given cell.
> It's a real show stopper and I haven't found a way
> round it.
>
> Best wishes,
> Mikkel
>
> PS. I'm using dbGetQuery to query an SQLite database.

NULL represents a zero length object in R.

Thus, trying to set only the first row in a data frame to NULL makes no sense, since you cannot have a 0 length object that also has a single row (as you seem to be trying to do above).

Since a data frame is a series of lists, you could do the following:

> temp <- NULL
> xmat <- as.data.frame(matrix(NA, 2, 3))

> xmat

  V1 V2 V3
1 NA NA NA
2 NA NA NA

> xmat[, 1] <- temp

> xmat

  V2 V3
1 NA NA
2 NA NA

which removes the first column in the data frame. This is the same as:

> xmat[, -1]

  V2 V3
1 NA NA
2 NA NA

You could also set the entire xmat to NULL as follows:

> xmat

  V1 V2 V3
1 NA NA NA
2 NA NA NA

> xmat <- NULL

> xmat

NULL You can then test to see if 'xmat' is a NULL:

> is.null(xmat)

[1] TRUE and base a boolean expression and resultant action on that result:

if (!is.null(xmat))
{
  do_calculations...
}

If your calculations are on a row by row basis, where NA's represent missing data, you can also use one of several functions to eliminate those rows. See ?na.action, ?na.omit and ?complete.cases for more information and examples.

HTH, Marc Schwartz



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Fri Jul 08 03:45:40 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:33:20 EST