Aarti Dahiya
2006-Jun-27 20:36 UTC
[R] Passing argument to a function called within another function
#Test at command line getQuery(name='John') This should give the result- select * from table_name where name='John' Instead, it gives- select * from table_name where = ' name = 'John' The reason is because in function call queryGenerator$generateQuery(passed) from within getQuery(), passed is a character vector so the function generateQuery() treats the whole thing as one argument value i.e. as args[[1]]. What can I do solve this problem? Thanks. I appreciate any help. File QueryGenerator.R ------------------------------- #Constructor for QueryGenerator setConstructorS3("QueryGenerator", function() { extend(Object(), "QueryGenerator") }) # Called when print(object) or object$print is called setMethodS3("as.character", "QueryGenerator", function(this) { paste("This is a QueryGenerator object.") }) # getData function generates the SQL query setMethodS3("generateQuery", "QueryGenerator", function(this,...) { args <- list(...) sql <- "select * from table_name where" for(i in 1:length(args)) { if(is.numeric(args[[i]])) { sql = paste(sql, names(args[i]), "=", args[[i]], collapse = " ") } else if(is.character(args[[i]])) { sql = paste(sql, names(args[i]), "=", sQuote(args[[i]]), collapse = " ") } # If in the current iteration args is not the last argument # add "and" keyword if(!identical(i, length(args))) { if(identical(names(args[i]),names(args[i + 1]))) sql = paste(sql, "or", collapse = " ") else sql = paste(sql, "and", collapse = " ") } cat("\nIntermediate Queries\n") cat(sql) } cat("\n\nFinal query\n") cat(sql) cat("\n") return(sql) }) File getQuery.R ---------------------- getQuery <- function(...) { args <- list(...) #Create the argument to be passed to generateQuery passed <- sub(",", "", paste(rbind(",", names(args), "=", sQuote(args)), collapse = " ")) #Create the QueryGenerator Object queryGenerator <- QueryGenerator() #Call getData() of DataRetriever class. results <- queryGenerator$generateQuery(passed) }