[R] Select columns of a data.frame by name OR index in a function
    Thaler, Thorn, LAUSANNE,	Applied Mathematics 
    Thorn.Thaler at rdls.nestle.com
       
    Thu Nov  3 14:48:26 CET 2011
    
    
  
Dear all,
Sometimes I have the situation where a function takes a data.frame and
an additional argument describing come columns. For greater flexibility
I want to allow for either column names or column indices. What I
usually do then is something like the following:
-------------8<-------------
f <- function(datf, cols) {
  nc <- seq_along(datf)
  cn <- colnames(datf)
  colOK <- (cols %in% nc) | (cols %in% cn)
  if (!all(colOK)) {
    badc <- paste(sQuote(cols[!colOK]), collapse = ", ")
    msg <- sprintf(ngettext(sum(!colOK),
                            "%s is not a valid column selector",
                            "%s are not valid column selectors"),
                   badc)
    stop(msg)
  }
  which((nc %in% cols) | (cn %in% cols)) # with this set of indices I
would work in the rest of the code
}
dd <- data.frame(a=1, b=1, c=1)
f(dd, 2:3) # [1] 2 3
f(dd, 1:4)  # Error in f(dd, 1:4) : '4' is not a valid column selector
f(dd, "a") # [1] 1
f(dd, c("a", "d", "e")) # Error in f(dd, c("a", "d", "e")) : 'd', 'e'
are not valid column selectors
------------->8-------------
So my question is, whether there are smarter/better/easier/more R-like
ways of doing that?
Any input appreciated.
KR,
-Thorn
    
    
More information about the R-help
mailing list