[R-br] Dúvida - Operadores %any%, :: e :::

Benilton Carvalho beniltoncarvalho em gmail.com
Segunda Agosto 1 18:25:09 BRT 2011


A notacao '%any%' quer dizer dois sinais '%' intercalados por uma
"palavra magica".

Por exemplo, '%in%'...

1:10 %in% c(4, 1, 19, 9)

A respeito dos '::' e ':::', voce vai precisar dar uma olhadinha na
definicao de 'name space' em linguagens de programacao. De forma
geral, lembre-se que um pacote pode ter funcoes 'publicas' (ie., as
funcoes que vc, enqto usuario, consegue enxergar) e funcoes 'privadas'
(invisiveis para o usuario final, mas usadas internamente nos
pacotes). Dito isso, '::' te da' acesso a funcoes publicas de um
pacote, ao passo que ':::' te da' acesso a funcoes privadas (voce,
enqto usuario, nao deve usar ':::' - salvo alguma rarissima excecao,
como uma falha na producao de um pacote).

A notacao empregada para os dois ultimos operadores e':

pacote::funcaoPublica
pacote:::funcaoPrivada

Por exemplo, o pacote 'stats' (padrao) tem a funcao publica que vc
conhece 'var'. Voce pode acessa-la usando:

var(1:8)

ou

stats::var(1:8)

A vantagem de voce poder fazer isso e': suponha que voce crie uma
outra funcao tambem chamada 'var'... dai' voce ainda pode usar a 'var'
original. Por exemplo:

var <- function(x) message('Essa funcao deveria retornar a variancia.')

E agora compare:

var(1:8)

e

stats::var(1:8)

Sobre ':::' - eu sei que o pacote nlme tem uma funcao que e' usada
apenas internamente... e ela e', em teoria, desconhecida pelos
usuarios finais: fitted.gnls .

Experimente:

library(nlme)
fitted.gnls

e

nlme::fitted.gnls  ##tbm vai falhar, pois ela nao eh publica...

e

nlme:::fitted.gnls  ## aqui ela aparece

Novamente, nao se preocupe com funcoes que sao acessadas por ':::' -
se uma funcao eh privada, eh pq nao se espera que o usuario final vah
emprega-la.

b


Mais detalhes sobre a lista de discussão R-br