From ripley at stats.ox.ac.uk  Sat Apr 19 07:51:18 2008
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sat, 19 Apr 2008 06:51:18 +0100 (BST)
Subject: [Rd] Pb with package::foo(x) <- value
In-Reply-To: <48095636.2040500@fhcrc.org>
References: <48095636.2040500@fhcrc.org>
Message-ID: <alpine.LFD.1.10.0804190640050.18033@gannet.stats.ox.ac.uk>

On Fri, 18 Apr 2008, Herve Pages wrote:

> Hi,
>
> The parser doesn't seem to like this:
>
>   somePackage::foo(x) <- value
>   somePackage:::foo(x) <- value
>
> where foo() is a replacement function or method defined in package 
> somePackage.

But the error message you show is not from the parser, and

> parse(text="somePackage:::foo(x) <- value")
expression(somePackage:::foo(x) <- value)
attr(,"srcfile")
<text>

does work. The error you show arises is in the evaluator.

That's because that is not legal code.  :: and ::: are operators, not part 
of the language per se (although I have proposed changing that).  The 
message comes at a check for a name, and base::length is not a name.

It often helps to look error messages up in the sources.


> For example:
>
>   > x <- integer(4)
>   > base::length(x) <- 7
>   Error in base::length(x) <- 7 : invalid function in complex assignment
>
> I've tried to put some back quotes on the left side of the assignment in
> different ways but was not successful. So finally I had to use the
> non-replacement form:
>
>   > x <- base::`length<-`(x, 7)
>   > x
>   [1]  0  0  0  0 NA NA NA
>
> Is there a way to avoid this?
>
> Thanks!
> H.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] Pb with package::foo(x) <- value
Prof Brian Ripley