[R] error in which(): recursive default argument reference

Gabor Grothendieck ggrothendieck at gmail.com
Tue Apr 11 13:52:09 CEST 2006


Or use letters. = letters and similarly for the other arguments of the
form x = x.

On 4/11/06, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
> 'letters' is an argument to your function, with default 'letters', that it
> itself.  (Default arguments are evaluated in the evaluation frame of the
> function, not in the caller.)
>
> Try letters=base::letters in your argument list.
>
> On Tue, 11 Apr 2006, Matthieu Dubois wrote:
>
> > Dear useRs,
> >
> > I have written a very simple function to compute some probabilities
> > on words (function is below). The function includes a which()
> > statement applied to a vector of characters (word.split): sapply
> > (word.split, function(x) which(letters==x)). This statement  worked
> > as expected when used outside the global function :
> > > word <- "hello"
> > > (word.split <- unlist(strsplit(word, split=c())))
> > [1] "h" "e" "l" "l" "o"
> > > (used.letters <- sapply(word.split, function(x) which(letters==x)))
> > h  e  l  l  o
> > 8  5 12 12 15
> >
> > However, when embedded in the fonction, the following error occurred :
> > >  compute.word("hello")
> > Error in which(letters == x) : recursive default argument reference
> >
> >
> > Any insights would be helpful ...
> >
> > Cheers,
> >
> > Matthieu
> >
> > Function :
> > #computes some probabilities based on (1) word frequency (word.freq),
> > letters visibility(letters.vis), letters frequency(letters.freq) and
> > viewing eccentricity (pos)
> > compute.word <- function(word, pos=X, word.freq=word.freq,
> > letters=letters, letters.vis=letters.vis, letters.freq=letters.freq)
> >       {
> >               word.split <- unlist(strsplit(word, split=c()))
> >
> >               #indexing vectors
> >               used.letters <- sapply(word.split, function(x) which(letters==x))
> >               pos <- c(1,rep(2,(length(word.split)-2)),3)
> >
> >               letters.freq.word <- unlist(letters.freq[cbind(used.letters, pos)])
> >               letters.vis.word <- letters.vis[paste("X", pos, sep=""),]
> >
> >               #computations
> >               Mean.Lvis <- mean(letters.vis.word)
> >               Prod.Lvis <- prod(letters.vis.word)
> >               PosRel <- sum((word.freq/letters.freq.word)*(letters.vis.word))
> >               output <- list(Mean.Lvis, Prod.Lvis, PosRel)
> >               names(output) <- c("Mean.Lvis", "Prod.Lvis", "PosRel")
> >               return(output)
> >       }
> >
> >
> >
> > Matthieu Dubois, PH.D. Student
> > Cognitive Neuroscience Unit
> > Université catholique de Louvain
> > 10, Place cardinal Mercier - 1348 Louvain-la-Neuve - BELGIUM
> >
> > Matthieu.Dubois at psp.ucl.ac.be
> >
> >
> >
> >
> >       [[alternative HTML version deleted]]
> >
> >
>
> --
> 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
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
>




More information about the R-help mailing list