[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