[R] Distinguishing variables from functions with the same name

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Fri Feb 13 18:52:46 CET 2009


Berwin A Turlach wrote:
> G'day Stavros,
>
> On Fri, 13 Feb 2009 11:11:28 -0500
> Stavros Macrakis <macrakis at alum.mit.edu> wrote:
>
>   
>> On Fri, Feb 13, 2009 at 10:47 AM, Gabor Grothendieck
>> <ggrothendieck at gmail.com> wrote:
>>     
>>> See ?get and try:
>>>       
>> Interesting.  I hadn't paid attention to the 'mode' argument before.
>>
>> Where would it be advisable to use anything but mode='any' or
>> mode='function'?
>>     
>
> I guess the answer to this question is more often than not in the source. :)
> On my machine:
>
> berwin at berwin-nus1:/opt/src/R-devel-src/src/library$ find . -name "*.R" -type f | xargs grep "get(" \
>   
>> | grep mode  | grep -v function | grep -v all
>>     


hmm, looks like you can do it with just one call to grep:

grep -R -P --include=*.R 'get\(.*mode\s*=\s*"(?!function|any)' .
# ./src/library/utils/R/Sweave.R:        syntax <- get(syntax, mode="list")
# ./src/library/utils/R/Sweave.R:        syntax <- get(sname, mode = "list")
# ./src/library/utils/R/Sweave.R:        s <- get(sname, mode="list")
# ./src/library/tools/R/QC.R:            al <- get(al, envir = code_env,
mode = "list")
# ./src/library/tools/R/QC.R:            al <- get(al, envir = ns_env,
mode = "list")
# ./src/library/tools/R/QC.R:                al <- get(al, envir =
data_env, mode = "list")

(you'll need grep compiled with --enable-perl-regexpr for this)

note this fancy comment in ?get:

" 'mode' here is a mixture of the meanings of 'typeof' and 'mode'"

vQ



> ./tools/R/QC.R:            al <- get(al, envir = code_env, mode = "list")
> ./tools/R/QC.R:            al <- get(al, envir = ns_env, mode = "list")
> ./tools/R/QC.R:                al <- get(al, envir = data_env, mode = "list")
> ./utils/R/Sweave.R:        syntax <- get(syntax, mode="list")
> ./utils/R/Sweave.R:        syntax <- get(sname, mode = "list")
> ./utils/R/Sweave.R:        s <- get(sname, mode="list")
> ./utils/R/str.R:        str(get(nam, envir = E, mode = M),
> ./stats/R/model.tables.R:       tables[[i]] <- tapply(data, model[model.cols[[i]]], get(fun))
> ./stats/R/models.R:        ##     get(contr.funs[1 + isOF[nn]])(nlevels(data[[nn]]))
> ./base/R/get.R:    .Internal(get(x, envir, mode, inherits))
> ./base/R/get.R:     .Internal(mget(x, envir, mode, ifnotfound, inherits))
> ./base/R/match.fun.R:        FUN <- get(as.character(FUN), mode =
> "any", envir = envir)
>
>
> The first few hits seem to indicate examples where it is necessary 
> to look specifically for a list.
>
> Cheers,
>
> 	Berwin
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.




More information about the R-help mailing list