On 07-Nov-05 Angelo Secchi wrote:
> 
> Hi,
> I'm trying to write a simple function like
> 
> case1 <- function (m, cov, Q, R) {
>   theta     <- (acos(R/sqrt(Q^3)))
>   beta      <- (-2)*sqrt(Q)*cos(theta/3)+m[1]/3
>   rho1      <- (-2)*sqrt(Q)*cos((theta+2*pi)/3)+m[1]/3
>   rho2     <- (-2)*sqrt(Q)*cos((theta-2*pi)/3)+m[1]/3
>   stderrb   <-  deltamethod( ~(-2)*sqrt(Q)*cos(theta/3)+x1/3,m,cov)
>   stderrr1  <-  deltamethod( ~(-2)*sqrt(Q)*cos((theta+2*pi)/3)+x1/3, m,
> cov) stderrr2  <-  deltamethod( ~(-2)*sqrt(Q)*cos((theta-2*pi)/3)+x1/3,
> m, cov) stderr    <- c(stderrb,stderrr1,stderrr2)
>   results   <- c(beta,rho1,rho2,stderr)
>   results2  <- t(results)
>   results2
> }
> 
> When I call the function in an IF statement like
> 
> if (Q^3>R^2) results2 <- case1() else print('ciccio')
> 
> I get 
> 
> Error in eval(expr, envir, enclos) : Object "theta" not found
> 
> I do not understand why, any help?

Because when the function 'case1' is called as "case1()" it
has no information on the values of m, cov, Q and R since
it only looks in its argument list for these values (and
not in the environment from which you called it).

It would be different if, in the function definition, you
had assigned default values for arguments not mentioned in
the function call, since it would then use these values
instead, for example

  case1 <- function (m=1, cov=1, Q=1, R=1) {
  ...
  }

but probably you do not want to do anything like that in this case.

Best wishes,
Ted.


--------------------------------------------------------------------
E-Mail: (Ted Harding) <[EMAIL PROTECTED]>
Fax-to-email: +44 (0)870 094 0861
Date: 07-Nov-05                                       Time: 20:14:07
------------------------------ XFMail ------------------------------

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to