Hello all, I am trying write a fairly simple function that provide a quick way to calculate several distributions for a data set. I am trying to provide a function that has a argument that specifies which distribution is outputted (here "norm" or "cumu"). I also have a melt argument but that seems to be working fine. I have been able to get my function working well for just one distribution but when I add another and try to add a "dist.type" argument (with potential values "cumu" and "norm"), I get an error message (see below). I am having trouble finding material that explains how to add an argument that isn't a TRUE/FALSE situation. Could any explain what I am doing wrong with the second "distribution specifying" argument? I apologize as I am sure this is a simple problem but I am just getting my feet wet with this type of thing in R and am having a little trouble diagnosing the problem.
#Example below: library(reshape) dat <- data.frame(`v1`=runif(6, 0, 125), `v2`=runif(6, 50, 75), `v3`=runif(6, 0, 100), `v4`=runif(6, 0, 200) ) my.norm <- function(x, melt=TRUE) { #Normalized distribution N.dist <- as.data.frame(sapply(1:length(x), function(i) (x[[i]]/rowSums(x[,c(1:4)]))*100 )) norm.melt <- melt.data.frame(N.dist) if (melt == TRUE) ##Default is a melted data frame return(norm.melt) if (melt == FALSE) return(N.dist) } ## So this single distribution function works fine my.norm(dat, melt=TRUE) my.fun <- function(x, melt=TRUE, dist.type=norm) { #Normalized distribution N.dist <- as.data.frame(sapply(1:length(x), function(i) (x[[i]]/rowSums(x[,c(1:4)]))*100 )) norm.melt <- melt.data.frame(N.dist) if (melt == TRUE && dist.type == norm) ##Default is a melted data frame return(norm.melt) if (melt == FALSE && dist.type == norm) return(N.dist) ## Cumulative distribution C.dist <- as.data.frame(t(apply(N.dist, 1, cumsum))) cumu.melt <- melt.data.frame(C.dist) if (melt == TRUE && dist.type == cumu) ##Default is a melted data frame return(cumu.melt) if (melt == FALSE && dist.type == cumu) return(C.dist) } ## But this function when used yields two different error messages depending on the value used for dist.type: my.fun(dat, melt=TRUE, dist.type = norm) ## Error in dist.type == norm : ## comparison (1) is possible only for atomic and list types my.fun(dat, melt=TRUE, dist.type = cumu) ## Error in my.fun(dat, dist.type = cumu) : object 'cumu' not found Thanks in advance! Sam ______________________________________________ R-help@r-project.org mailing list 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.