Peter Young
2012-Aug-04 19:35 UTC
[R] how to coerce the result of sweep to be an array if result of FUN is a string?
Hi, I would like to use sweep to "sweep out" proportions and confidence intervals for an array, however when I supply a function which returns a string (containing something like "9% (3-18%)") I get back a list instead of an array, here is a simplified example: # example showing that sweep does not return an array with same dimensions as STATS as advertised string.fun <- function(a, b) { paste(a, "-", b, sep="") } num.fun <- function(a, b) { a+b/100 } m <- array(seq(1:24), dim = c(2,3,4)) stat <- array(seq(1:12), dim = c(3,4)) string.ans <- sweep(m, c(2,3), stat, string.fun) dim(string.ans) length(string.ans) num.ans <- sweep(m, c(2,3), stat, num.fun) dim(num.ans) Although the contents are correct, strings.ans is a list while num.ans is an array. Help(sweep) says that the result of sweep should have the same dimensions as x, however when the result of the function is a string this is not the case. How can I coerce the result of the function to cause sweep to return an array as advertised? thanks, Peter Peter Young, MPH Surveillance Epidemiologist CDC Mozambique [[alternative HTML version deleted]]
Rui Barradas
2012-Aug-04 21:50 UTC
[R] how to coerce the result of sweep to be an array if result of FUN is a string?
Hello, You can coerce the result to the input shape by assigning the dim attribute by hand. string.ans <- sweep(m, c(2,3), stat, string.fun) dim(string.ans) <- dim(m) string.ans Or put this in a function. # An abbreviation and the complete function name sweep.ch <- sweep.character <- function(x, MARGIN, STATS, FUN="-", check.margin=TRUE, ...){ result <- sweep(x, MARGIN, STATS, FUN, check.margin, ...) dim(result) <- dim(x) result } string.ans2 <- sweep.ch(m, c(2,3), stat, string.fun) string.ans2 Hope this helps, Rui Barradas Em 04-08-2012 20:35, Peter Young escreveu:> Hi, > > > > I would like to use sweep to "sweep out" proportions and confidence intervals for an array, however when I supply a function which returns a string (containing something like "9% (3-18%)") I get back a list instead of an array, here is a simplified example: > > > > # example showing that sweep does not return an array with same dimensions as STATS as advertised > > > > string.fun <- function(a, b) { > > paste(a, "-", b, sep="") > > } > > num.fun <- function(a, b) { > > a+b/100 > > } > > m <- array(seq(1:24), dim = c(2,3,4)) > > stat <- array(seq(1:12), dim = c(3,4)) > > > > string.ans <- sweep(m, c(2,3), stat, string.fun) > > dim(string.ans) > > length(string.ans) > > num.ans <- sweep(m, c(2,3), stat, num.fun) > > dim(num.ans) > > > > Although the contents are correct, strings.ans is a list while num.ans is an array. Help(sweep) says that the result of sweep should have the same dimensions as x, however when the result of the function is a string this is not the case. How can I coerce the result of the function to cause sweep to return an array as advertised? > > > > thanks, > > Peter > > > > Peter Young, MPH > > Surveillance Epidemiologist > > CDC Mozambique > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.