[R] xmat[1, 2:3] <- NULL
Mikkel Grum
mi2kelgrum at yahoo.com
Thu Jul 7 22:40:41 CEST 2005
Thanks a lot!! This was really a big help. The
following solves my problem:
xmat <- as.data.frame(matrix(NA, 2, 3))
temp <- dbGetQuery(...)
if (!is.null(temp)) {xmat[i, 2:3] <- temp}
I'm adding data to only some columns of a larger
matrix, on a row-by-row basis.
Best wishes,
Mikkel
--- "Marc Schwartz (via MN)" <mschwartz at mn.rr.com>
wrote:
> 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