7
votes

Assume I have a function that reads data from a MySQL table, manipulates it and returns some data.frame. Note the function is just an example whose functionality does not matter itself..., E.g.:

addRowSd <- function(table,con,pattern="^Variable") {

dframe <- dbReadTable(con,table)
cn <- colnames(dframe)
qs <- subset(x, x  %in% grep(pattern, x, value=TRUE))
dframe$qsd <- sd(t(dframe[,c(qs)])) 

return(dframe)
}

mydf$sd <- addRowSd(...)

I end up with a data.frame called mydf. Now I´d like to do to this to a character vector of SQL table names AND name the returned dataframes correspondingly. If I just use

x=lapply(MySQLtablenames,addRowSd,con)

I´ll get some list called x. Of course I could unlist and rename everything the way I´d like to, but my question is:

How can I make lapply (or another comparable function) return multple single dataframes or at least a list that contains some names derived from my character vector "MySQLtablenames"?

2
possibly it might help to make the addRowSd function assign some name to returned data.frame...Matt Bannert
How about names(x) <- MySQLtablenames or in one line x<-setNames(lapply(MySQLtablenames,addRowSd,con),MySQLtablenames) or x<-lapply(setNames(MySQLtablenames,MySQLtablenames),addRowSd,con)Marek

2 Answers

11
votes

just found an answer on my own:

assign("somename",dframe,envir = .GlobalEnv)
1
votes

If you supply sapply a character vector, it will name the items in the returned list by the supplied character vector (USE.NAMES default to TRUE)... I would also use simplify=FALSE as depending on the data.frames returned you may get unpredictable results

x=sapply(MySQLtablenames,addRowSd,con, simplify=FALSE)