Dear Jamil,

Presumably, the variables alloc.dose, r0, r1, and r2 will exist in the global 
environment when you call the compiled function lf1.c(), but didn’t exist when 
you compiled the function. If so, then lf1.c() should work properly despite the 
notes (not errors, or even warnings) that was printed.

On the other hand, relying on global data in a function is poor programming 
style — it would be better to make alloc.dose, etc., arguments to the function. 
As well, if you’re compiling the function to improve efficiency, then you 
probably also want to compile psi0(), etc.

I hope that this helps,
 John

John Fox
Sen. William McMaster Professor of Social Statistics
McMaster University
Hamilton, Ontario, Canada
Web: http::/socserv.mcmaster.ca/jfox

> On Jan 27, 2017, at 10:43 AM, Naser Jamil <jamilnase...@gmail.com> wrote:
> 
> Dear R-users,
> I would like to seek your suggestion. I have the following code which runs
> smoothly. But when I compile the function (lf1.c), it shows "no visible
> binding for global variable" for some of the arguments.
> 
> ###################################
> 
> library(compiler)
> 
> 
> psi0<-function(theta1,theta2,theta3,theta4,x){
> z1<-exp(theta1+theta2*x)
> z2<-exp(theta3+theta4*x)
> 1/((1+z1)*(1+z2))
>                                             }
> 
> psi1<-function(theta1,theta2,theta3,theta4,x){
> z1<-exp(theta1+theta2*x)
> z2<-exp(theta3+theta4*x)
> z1/((1+z1)*(1+z2))
>                                             }
> psi2<-function(theta3,theta4,x) {
> z2<-exp(theta3+theta4*x)
> z2/(1+z2)
>                                }
> 
> 
> 
> lf1<-function(w) {
>   v<-1
>   w1<-w[1]
>   w2<-w[2]
>   w3<-w[3]
>   w4<-w[4]
>   for (i in 1:length(alloc.dose)) {
>       dose.i<-alloc.dose[i]
>       r0.i<-r0[i]
>       r1.i<-r1[i]
>       r2.i<-r2[i]
>       z1<-exp(w1+w2*dose.i)
>       z2<-exp(w3+w4*dose.i)
>       psi0<-1/((1+z1)*(1+z2))
>       psi1<-z1*psi0
>       v<-v*(psi0^r0.i)*(psi1^r1.i)*((1-psi0-psi1)^r2.i)
>                                   }
>   return(v)
>                  }
> 
> 
> lf1.c<-cmpfun(lf1)
> 
> ###############################
> 
> May I know how to avoid this message? If I leave the code as it is, will
> that affect the result anyway?
> 
> Thanks in advance.
> 
> 
> Regards,
> Jamil.
> 
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.





______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to