Dear all, I have following piece of codes:
xx <- seq(-2,2, length.out=11)
mat1 <- cbind(rep(43, 5), rnorm(5))
mat2 <- cbind(rep(53, 5), rnorm(5))
outer(c(1,-1), xx, function(x,y) {
AA <- sign(x)
BB <- sign(y)
CC <- abs(y)
DD1 <- mat1[,2]-mat1[1,1]
DD2 <- mat2[,2]-mat2[1,1]
EE <- (DD1 - 0) *AA + DD2*BB
res1 <- mean(EE)/mat1[1,1]
res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) >
-0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65"))
return(paste(res1, res2, sep="--"))
}
)
While running this code I am getting warnings as well as error:
> outer(c(1,-1), xx, function(x,y) {
+ AA <- sign(x)
+ BB <- sign(y)
+ CC <- abs(y)
+ DD1 <- mat1[,2]-mat1[1,1]
+ DD2 <- mat2[,2]-mat2[1,1]
+ EE <- (DD1 - 0) *AA + DD2*BB
+ res1 <- mean(EE)/mat1[1,1]
+ res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) >
-0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65"))
+ return(paste(res1, res2, sep="--"))
+ }
+ )
Error in dim(robj) <- c(dX, dY) :
dims [product 22] do not match the length of object [1]
In addition: Warning messages:
1: In (DD1 - 0) * AA :
longer object length is not a multiple of shorter object length
2: In DD2 * BB :
longer object length is not a multiple of shorter object length
I am able to trace the warning, which comes from multiplication with
AA & BB. However could not find the correct way to tackle this
warning. Neither the error. Can somebody help me where I was wrong?
Thanks
Hi
It is difficult to give some help as you did not provide any clue what the
result shall be.
basically outer takes 2 vectors and evaluate function for each combination
of elements in both vectors. However the function has to be vectorised and
your function is not.
fff=function(x,y) {
+ AA <- sign(x)
+ BB <- sign(y)
+ CC <- abs(y)
+ DD1 <- mat1[,2]-mat1[1,1]
+ DD2 <- mat2[,2]-mat2[1,1]
+ EE <- (DD1 - 0) *AA + DD2*BB
+ res1 <- mean(EE)/mat1[1,1]
+ res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) >
+ -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65"))
+ return(paste(res1, res2, sep="--"))
+ }> fff(1:5, 3:8)
[1] "-2.22113283836956--< -0.65"
Warning messages:
1: In DD2 * BB :
longer object length is not a multiple of shorter object length
2: In (DD1 - 0) * AA + DD2 * BB :
longer object length is not a multiple of shorter object length
Therefore you need to redefine DD1, DD2 and EE computation.
Regards
Petr
r-help-bounces at r-project.org napsal dne 22.09.2010 10:18:07:
> Dear all, I have following piece of codes:
>
> xx <- seq(-2,2, length.out=11)
> mat1 <- cbind(rep(43, 5), rnorm(5))
> mat2 <- cbind(rep(53, 5), rnorm(5))
> outer(c(1,-1), xx, function(x,y) {
> AA <- sign(x)
> BB <- sign(y)
> CC <- abs(y)
> DD1 <- mat1[,2]-mat1[1,1]
> DD2 <- mat2[,2]-mat2[1,1]
> EE <- (DD1 - 0) *AA + DD2*BB
> res1 <- mean(EE)/mat1[1,1]
> res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) >
> -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65"))
> return(paste(res1, res2, sep="--"))
> }
> )
>
> While running this code I am getting warnings as well as error:
>
> > outer(c(1,-1), xx, function(x,y) {
> + AA <- sign(x)
> + BB <- sign(y)
> + CC <- abs(y)
> + DD1 <- mat1[,2]-mat1[1,1]
> + DD2 <- mat2[,2]-mat2[1,1]
> + EE <- (DD1 - 0) *AA + DD2*BB
> + res1 <- mean(EE)/mat1[1,1]
> + res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) >
> -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65"))
> + return(paste(res1, res2, sep="--"))
> + }
> + )
> Error in dim(robj) <- c(dX, dY) :
> dims [product 22] do not match the length of object [1]
> In addition: Warning messages:
> 1: In (DD1 - 0) * AA :
> longer object length is not a multiple of shorter object length
> 2: In DD2 * BB :
> longer object length is not a multiple of shorter object length
>
> I am able to trace the warning, which comes from multiplication with
> AA & BB. However could not find the correct way to tackle this
> warning. Neither the error. Can somebody help me where I was wrong?
>
> Thanks
>
> ______________________________________________
> 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.
Thanks Petr for your input. As you correctly said to make the function vectorize, I have done it and it is working fine:> fff=Vectorize(function(x,y) {+ AA <- sign(x) + BB <- sign(y) + CC <- abs(y) + DD1 <- mat1[,2]-mat1[1,1] + DD2 <- mat2[,2]-mat2[1,1] + EE <- (DD1 - 0) *AA + DD2*BB + res1 <- mean(EE)/mat1[1,1] + res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) > -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65")) + return(paste(res1, res2, sep="--")) + + } , SIMPLIFY=T)> > xx <- seq(-2,2, length.out=11) > mat1 <- cbind(rep(43, 5), rnorm(5)) > mat2 <- cbind(rep(53, 5), rnorm(5)) > outer(c(1,-1), xx, fff)[,1] [,2] [,3] [1,] "0.233925416547453--0.200552670788527" "0.233925416547453--0.200552670788527" "0.233925416547453--0.200552670788527" [2,] "2.22952930395195--2.18449964755786" "2.22952930395195--2.18449964755786" "2.22952930395195--2.18449964755786" [,4] [,5] [,6] [1,] "0.233925416547453--0.200552670788527" "0.233925416547453--0.200552670788527" "-0.997801943702248--< -0.65" [2,] "2.22952930395195--2.18449964755786" "2.22952930395195--2.18449964755786" "0.997801943702248--0.973240910381122" [,7] [,8] [,9] [1,] "-2.22952930395195--< -0.65" "-2.22952930395195--< -0.65" "-2.22952930395195--< -0.65" [2,] "-0.233925416547453---0.295820647090963" "-0.233925416547453---0.295820647090963" "-0.233925416547453---0.295820647090963" [,10] [,11] [1,] "-2.22952930395195--< -0.65" "-2.22952930395195--< -0.65" [2,] "-0.233925416547453---0.295820647090963" "-0.233925416547453---0.295820647090963" On Wed, Sep 22, 2010 at 8:27 PM, Petr PIKAL <petr.pikal at precheza.cz> wrote:> Hi > > It is difficult to give some help as you did not provide any clue what the > result shall be. > basically outer takes 2 vectors and evaluate function for each combination > of elements in both vectors. However the function has to be vectorised and > your function is not. > > fff=function(x,y) { > + ? ? ? ? ? ? ? ? ? ? ? AA <- sign(x) > + ? ? ? ? ? ? ? ? ? ? ? BB <- sign(y) > + ? ? ? ? ? ? ? ? ? ? ? CC <- abs(y) > + ? ? ? ? ? ? ? ? ? ? ? DD1 <- mat1[,2]-mat1[1,1] > + ? ? ? ? ? ? ? ? ? ? ? DD2 <- mat2[,2]-mat2[1,1] > + ? ? ? ? ? ? ? ? ? ? ? EE <- (DD1 - 0) *AA + DD2*BB > + ? ? ? ? ? ? ? ? ? ? ? res1 <- mean(EE)/mat1[1,1] > + ? ? ? ? ? ? ? ? ? ? ? res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) > > + -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65")) > + ? ? ? ? ? ? ? ? ? ? ? return(paste(res1, res2, sep="--")) > + ? ? ? ? ? ? ? ? ? ? } >> fff(1:5, 3:8) > [1] "-2.22113283836956--< -0.65" > Warning messages: > 1: In DD2 * BB : > ?longer object length is not a multiple of shorter object length > 2: In (DD1 - 0) * AA + DD2 * BB : > ?longer object length is not a multiple of shorter object length > > Therefore you need to redefine DD1, DD2 and EE computation. > > Regards > Petr > > > r-help-bounces at r-project.org napsal dne 22.09.2010 10:18:07: > >> Dear all, I have following piece of codes: >> >> xx <- seq(-2,2, length.out=11) >> mat1 <- cbind(rep(43, 5), rnorm(5)) >> mat2 <- cbind(rep(53, 5), rnorm(5)) >> outer(c(1,-1), xx, function(x,y) { >> ? ? ? ? ? ? ? ? ? ? ? AA <- sign(x) >> ? ? ? ? ? ? ? ? ? ? ? BB <- sign(y) >> ? ? ? ? ? ? ? ? ? ? ? CC <- abs(y) >> ? ? ? ? ? ? ? ? ? ? ? DD1 <- mat1[,2]-mat1[1,1] >> ? ? ? ? ? ? ? ? ? ? ? DD2 <- mat2[,2]-mat2[1,1] >> ? ? ? ? ? ? ? ? ? ? ? EE <- (DD1 - 0) *AA + DD2*BB >> ? ? ? ? ? ? ? ? ? ? ? res1 <- mean(EE)/mat1[1,1] >> ? ? ? ? ? ? ? ? ? ? ? res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) > >> -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65")) >> ? ? ? ? ? ? ? ? ? ? ? return(paste(res1, res2, sep="--")) >> ? ? ? ? ? ? ? ? ? ? } >> ? ? ? ? ? ? ? ? ? ) >> >> While running this code I am getting warnings as well as error: >> >> > outer(c(1,-1), xx, function(x,y) { >> + ? ? ? ? ? ? ? ? ? ? ? AA <- sign(x) >> + ? ? ? ? ? ? ? ? ? ? ? BB <- sign(y) >> + ? ? ? ? ? ? ? ? ? ? ? CC <- abs(y) >> + ? ? ? ? ? ? ? ? ? ? ? DD1 <- mat1[,2]-mat1[1,1] >> + ? ? ? ? ? ? ? ? ? ? ? DD2 <- mat2[,2]-mat2[1,1] >> + ? ? ? ? ? ? ? ? ? ? ? EE <- (DD1 - 0) *AA + DD2*BB >> + ? ? ? ? ? ? ? ? ? ? ? res1 <- mean(EE)/mat1[1,1] >> + ? ? ? ? ? ? ? ? ? ? ? res2 <- ifelse(quantile(EE/mat1[1,1], 0.05) > >> -0.65, quantile(EE/mat1[1,1], 0.05), paste("< -0.65")) >> + ? ? ? ? ? ? ? ? ? ? ? return(paste(res1, res2, sep="--")) >> + ? ? ? ? ? ? ? ? ? ? } >> + ? ? ? ? ? ? ? ? ? ) >> Error in dim(robj) <- c(dX, dY) : >> ? dims [product 22] do not match the length of object [1] >> In addition: Warning messages: >> 1: In (DD1 - 0) * AA : >> ? longer object length is not a multiple of shorter object length >> 2: In DD2 * BB : >> ? longer object length is not a multiple of shorter object length >> >> I am able to trace the warning, which comes from multiplication with >> AA & BB. However could not find the correct way to tackle this >> warning. Neither the error. Can somebody help me where I was wrong? >> >> Thanks >> >> ______________________________________________ >> 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. > >