[R] what's wrong with this 'length' in function?

Peter Langfelder peter.langfelder at gmail.com
Fri Nov 12 02:00:21 CET 2010


You change x from a single value to a vector of size 2, for example here:

if (j==2) {x=x+c(-1,1)*0.5}

That makes

c(               qchisq(1-alpha/2,df=2*x)/2,
                  qchisq(alpha/2,df=2*x+2)/2)

a vector of 4 numbers that you are trying to assign to a row of a
matrix with two columns.

Keep x a single number and things will run smoothly.

Peter


On Thu, Nov 11, 2010 at 4:42 PM, casperyc <casperyc at hotmail.co.uk> wrote:
>
> Hi all,
>
> I am having a trouble with this function I wrote
>
> ###################################################
> p26=function(x,alpha){
>
>        # dummy variable
>        j=1
>
>        ci=matrix(ncol=2,nrow=3)
>
>        while (j<4){
>                if (j==2) {x=x+c(-1,1)*0.5}
>
>                ci[j,]=
>                x+qnorm(1-alpha/2)^2/2+
>                c(-1,1)*qnorm(1-alpha/2)*
>                sqrt(x+qnorm(1-alpha/2)^2/4)
>
>                j=j+1
>
>                if (j==3) { # exact
>                        x=x-c(-1,1)*0.5
>                        ci[j,]=c(
>                        qchisq(1-alpha/2,df=2*x)/2,
>                        qchisq(alpha/2,df=2*x+2)/2)
>                j=j+1
>                }
>        }
>                rownames(ci)=c('without','with','exact')
>                colnames(ci)=c('lower','upper')
>                return(round(ci,2))
> }
> ###################################################
>
> Most bits are fine.
>
> The problem part is
> ###################################################
>                if (j==3) { # exact
>                        x=x-c(-1,1)*0.5
>                        ci[j,]=c(
>                        qchisq(1-alpha/2,df=2*x)/2,
>                        qchisq(alpha/2,df=2*x+2)/2)
>                j=j+1
>                }
> ###################################################
> in the middle, when I run the function with
>
> p26(89,0.05)
>
> I got the following
>
> ###################################################
> Error in ci[j, ] = c(qchisq(1 - alpha/2, df = 2 * x)/2, qchisq(alpha/2,  :
>  number of items to replace is not a multiple of replacement length
> ###################################################
>
> I have been looking at it for a long time, still dont know why the 'length'
> differ??
>
> can someone spot it?
>
> Thanks.
>
> casper
>
> --
> View this message in context: http://r.789695.n4.nabble.com/what-s-wrong-with-this-length-in-function-tp3038908p3038908.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list