[R-pkg-devel] Assignments to the global environment and use of on.exit

Siddhanta Phuyal @|ddh@nt@phuy@|7159 @end|ng |rom gm@||@com
Fri Jun 25 14:29:01 CEST 2021


Hello,

Thank You. It worked. The package has been submitted to CRAN. Thank You for
your helpful feedback.

On Tue, Jun 22, 2021 at 10:00 PM Oliver Madsen <oliver.p.madsen using gmail.com>
wrote:

> The problem is solved by either
>
> 1) creating an environment variable within the package namespace (as you
> would a function) using new.env(). This can then be used instead of the
> global environment.
> 2) assigning variables to the namespace of the function running the shiny
> app.
>
> 1) is the second answer in the link provided by Jeff.
>
>
> On Tue, 22 Jun 2021, 18:05 Jeff Newmiller, <jdnewmil using dcn.davis.ca.us>
> wrote:
>
>> Just don't. E.g.
>> https://stackoverflow.com/questions/12598242/global-variables-in-packages-in-r
>>
>> On June 22, 2021 1:47:56 AM PDT, Siddhanta Phuyal <
>> siddhantaphuyal7159 using gmail.com> wrote:
>> > Hello,
>> >
>> >A few weeks ago, I submitted a package to CRAN. The automated system
>> >rejected the package showing the following note:
>> >
>> >Found the following assignments to the global environment:
>> >  File 'EuclideanSD/R/EuclideanSD.R':
>> >    assign("nums", x, envir = globalenv())
>> >
>> >Context of the problem:
>> >
>> >The package has a function that takes a vector from the user. The
>> >vector is
>> >used by the shiny app to produce the desired output. The sever and UI
>> >functions are located inside the 'inst' folder. Since they are located
>> >at a
>> >different location, the server function cannot directly access the
>> >vector
>> >received by the function from the user. Hence, the package creates a
>> >global
>> >variable to store the data which can also be used by the server
>> >function.
>> >
>> >The solution I offered:
>> >
>> >However, before assigning the variable to a global environment, the
>> >function checks whether there is a variable with the same name in the
>> >global environment. If there is such a variable, then the function
>> >restores
>> >that variable back to its original state by using on.exit(num<-oldnum)
>> >prior to exiting the function. On the contrary, if such a variable does
>> >not
>> >exist, then the variable assigned to the global environment is removed
>> >on
>> >exit. I have included the code to clarify my argument. Please see below
>> >for
>> >the code:
>> >
>> >if (exists("nums",where = 1)){
>> >    oldnums <- nums
>> >    nums <- x
>> >    shiny::runApp(system.file(package="EuclideanSD","app"))
>> >    on.exit(nums<-oldnums)
>> >
>> >  }else{
>> >    assign("nums",x,envir = globalenv())
>> >    shiny::runApp(system.file(package="EuclideanSD","app"))
>> >    on.exit(remove("nums",pos=1))
>> >  }
>> >
>> >I tried to explain the same to the maintainers of CRAN by replying to
>> >the
>> >message that I got from the CRAN. However, there was no response.
>> >
>> >I have two questions that I hope to get help from this community:
>> >
>> >1) Is my solution reasonably okay with the requirements of the CRAN?
>> >2) If the solution is not okay, what could be the better solution?
>> >However,
>> >the features of the package cannot be changed. For example, the data
>> >has to
>> >be fed through the function and not through the website.
>> >
>> >Thank you for your help.
>> >
>> >Looking forward to hearing from you.
>> >
>> >Best Regards,
>> >Siddhanta Phuyal
>> >
>> >       [[alternative HTML version deleted]]
>> >
>> >______________________________________________
>> >R-package-devel using r-project.org mailing list
>> >https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
>> --
>> Sent from my phone. Please excuse my brevity.
>>
>> ______________________________________________
>> R-package-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list