[Rd] Sharing variables in seperate workspace

Martin Morgan mtmorgan at fhcrc.org
Tue Apr 21 15:41:23 CEST 2009


Philip <philip at sctkjeld.dk> writes:

> Hi all.

Hi Philip -- I think this thread

  https://stat.ethz.ch/pipermail/r-devel/2009-March/052867.html

addresses your issue. Basically, create an environment or closure in
which you can modify variables.

HTH,

Martin

>
>
> I'm for the first time trying to make a library in R 2.8.1 on Ubuntu
> Linux. The library is very simple, R functions just need to share a
> variable (that is defined in the R code) and maybe functions and export
> functions for the user to .GlobalEnv. This variable should only be
> directly accessible from the global workspace (without change of
> environment) via a hereto dedicated function. It only consists of R
> code. I'm not sure if I should rather ask R-help. If so, just tell me.
>
> The package source is available at
> http://www.delff.dk/~philip/bdplot/
> the check output at
> http://www.delff.dk/~philip/bdplot.Rcheck/
>
> The package code was checked and stopped because of lack of examples.
> Until that, everything is OK.
>
>> ### ** Examples
>>
>> ~~ simple examples of the most important functions ~~
> Error: unexpected symbol in "~~ simple examples"
> Execution halted
>
> I would like to get the code issue solved before moving the
> documentation from the R scripts and have proceeded the to building and
> installation. These two last steps gave no warnings or errors.
>
> My problem is that I cannot change the mentioned variable (from now on
> called .FOO) that belongs to the namespace of the package. I think it is
> because .FOO variable in some locked state, maybe by default created as
> read-only. It is called .FOO because I use exportPattern("^[[:alpha:]]+")
> as NAMESPACE file. I don't import anything.
>
> I have a function (bar) that, like par does with .Pars from the graphics
> namespace, modifies the contents of a list. This function has in the
> bottom (when the function name is called without () from the R command
> line) a line
>
> <environment: namespace:"mypackage">
>
> This is like par() has the graphics namespace mentioned, and therefore,
> as I would expect. I can via this function read the contents of the
> variable just by print(.FOO). This cannot be done from .GlobalEnv which
> is as intended. The surprise is that I cannot write to it. If I do
>
> .FOO$x <<- "value"
> (names and values are arguments to the function, like with par().), I
> get the error:
>
> cannot change value of locked binding for '.FOO'
>
> The double arrow, I use because <- does not affect the contents of .FOO
> after the function has run. I don't know how I can use assign in this
> case. I don't know a name for my package's environment. I have tried
> with my package's name in both assign() and unlockBinding(), but my
> package's name is not recognized as an environment (neither beginning
> with a dot.). I also tryed unlockBinding() in the NAMESPACE file.
>
> I don't know if this is normal, but I get
> <environment: R_GlobalEnv>
> from print(parent.frame()) and things like
> <environment: 0x8df2ad0>
> from print(environment())
> This is surprising to me. I would expect
> <environment: bdplot>
> from environment().
>
> How can I get to write to .FOO via bar()?
>
>
> Thank you very much
> Philip.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



More information about the R-devel mailing list