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

Marc Schwartz (via MN) mschwartz at mn.rr.com
Thu Jul 7 19:38:38 CEST 2005


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




More information about the R-help mailing list