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.