If you want a pointer to the correct syntax for subset(), try help("subset")!!!

The syntax of your "extstream" function is totally screwed up, convoluted and over-complicated. Note that even if you had your "subset" argument specified correctly, the return() call will give you only the result from the *first* pass through the for loop.

That aside, the error message is perfectly clear: 'subset' must be logical. Your "subset" argument is "stream" which is a factor.

You *could* redefine your "extstream" function as follows:

function(alldf) {
    sname <- levels(alldf$stream)
    rslt <- vector("list",length(sname))
    names(rslt) <- sname
    for (i in sname) {
       rslt[[i]] <- subset(alldf, alldf$stream==i, sampdate:quant)
    }
    rslt
}

However you don't need to go through such contortions:

    split(testset,testset$stream)

will give essentially what you want. If you wish to strip out the redundant "stream" column from the data frames in the resulting list, you could do that using lapply()

cheers,

Rolf Turner

--
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276

On 30/06/15 12:03, Rich Shepard wrote:
   Moving from interactive use of R to scripts and functions and have
bumped
into what I believe is a problem with variable names. Did not see a
solution
in the two R programming books I have or from my Web searches. Inexperience
with ess-tracebug keeps me from refining my bug tracking.

   Here's a test data set (cleverly called 'testset.dput'):

structure(list(stream = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label
= c("B", "J", "S"), class = "factor"),
     sampdate = structure(c(8121, 8121, 8121, 8155, 8155, 8155,
     8185, 8185, 8185, 8205, 8205, 8205, 8236, 8236, 8236, 8257,
     8257, 8257, 8308, 8785, 8785, 8785, 8785, 8785, 8785, 8785,
     8847, 8847, 8847, 8847, 8847, 8847, 8847, 8875, 8875, 8875,
     8875, 8875, 8875, 8875, 8121, 8121, 8121, 8155, 8155, 8155,
     8185, 8185, 8185, 8205, 8205, 8205, 8236, 8236, 8236, 8257,
     8257, 8257, 8301, 8301, 8301), class = "Date"), param =
structure(c(2L,
     6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L, 2L,
     6L, 7L, 2L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L,
     6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L,
     2L, 6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L, 2L, 6L, 7L
     ), .Label = c("Ca", "Cl", "K", "Mg", "Na", "SO4", "pH"), class =
"factor"),
     quant = c(4, 33, 8.43, 4, 32, 8.46, 4, 31, 8.43, 6, 33, 8.32,
     5, 33, 8.5, 5, 32, 8.5, 5, 59.9, 3.46, 1.48, 29, 7.54, 64.6,
     7.36, 46, 2.95, 1.34, 21.8, 5.76, 48.8, 7.72, 74.2, 5.36,
     2.33, 38.4, 8.27, 141, 7.8, 3, 76, 6.64, 4, 74, 7.46, 2,
     82, 7.58, 5, 106, 7.91, 3, 56, 7.83, 3, 51, 7.6, 6, 149,
     7.73)), .Names = c("stream", "sampdate", "param", "quant"
), row.names = c(NA, -61L), class = "data.frame")

   I want to subset that data.frame on each of the stream names: B, J,
and S.
This is the function that has the naming error (eda.R):

extstream = function(alldf) {
     sname = alldf$stream
     sdate = alldf$sampdate
     comp = alldf$param
     value = alldf$quant
     for (i in sname) {
         sname <- subset(alldf, alldf$stream, select = c(sdate, comp,
value))
         return(sname)
     }
}

   This is the result of running source('eda.R') followed by

extstream(testset)
Error in subset.data.frame(alldf, alldf$stream, select = c(sdate, comp,  :
   'subset' must be logical

   I've tried using sname for the rows to select, but that produces a
different error of trying to select undefined columns.

   A pointer to the correct syntax for subset() is needed.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to