Dúvida - Operadores %any%, :: e :::

Pessoal qual é a finalidade dos operadores %any%, :: e ::: ? Procurei no Help mas só vi a informação que segue no link ( http://stat.ethz.ch/R-manual/R-patched/library/base/html/Syntax.html). Praticamente poderiam me dar um exemplo? Pedro Rafael

Pedro Rafael, Conheço essa estrutura apenas para você definir seus próprios operdores. Por exemplo: # Pode-se definir seus próprios operadores, pois são função diretas com dois # argumentos cujo nome começa e as extremidades em %. '%mop%' = function(x, y) x * y 100 %mop% (1:10) ou assim: a = 1:10 b = 4:5 a %in% b Abs, -- ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ Jose Claudio Faria Estatistica - Prof. Pleno UESC/DCET/Brasil joseclaudio.faria at gmail.com ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ Em 1 de agosto de 2011 17:43, Pedro Rafael <pedro.rafael.marinho@gmail.com> escreveu:
Pessoal qual é a finalidade dos operadores %any%, :: e ::: ? Procurei no Help mas só vi a informação que segue no link (http://stat.ethz.ch/R-manual/R-patched/library/base/html/Syntax.html). Praticamente poderiam me dar um exemplo?
Pedro Rafael _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

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

Complementando as dicas do Benilton, Em programação orientada a objetos (R é uma delas e usa atualmente dois sistemas: S3 e S4) algumas vezes o desenvolvedor opta por encapsular um objeto. Encapsular um objeto (no caso uma função) significa ocultar do usuário detalhes usados no desenvolvimento dessa função. Por exemplo, as funções abaixo (plot.acf*, plot.data.frame*, plot.factor*, plot.formula*, etc) estão todas encapsuladas. Observe o marcador "*" em todas elas!
methods(plot) [1] plot.acf* plot.data.frame* plot.decomposed.ts* [4] plot.default plot.dendrogram* plot.density [7] plot.ecdf plot.factor* plot.formula* [10] plot.hclust* plot.histogram* plot.HoltWinters* [13] plot.isoreg* plot.lm plot.medpolish* [16] plot.mlm plot.ppr* plot.prcomp* [19] plot.princomp* plot.profile.nls* plot.spec [22] plot.spec.coherency plot.spec.phase plot.stepfun [25] plot.stl* plot.table* plot.ts [28] plot.tskernel* plot.TukeyHSD
Non-visible functions are asterisked Se você digita o nome de uma delas para ver seu código fonte:
plot.data.frame
Recebe a mensagem: Erro: objeto 'plot.data.frame' não encontrado! Ou seja, esta função está encapsulada (não visível ao usuário comum). O operador ":::" lhe permite ter acesso ao código fonte de qualquer função encapsulada (não visível):
graphics:::plot.data.frame function (x, ...) { plot2 <- function(x, xlab = names(x)[1L], ylab = names(x)[2L], ...) plot(x[[1L]], x[[2L]], xlab = xlab, ylab = ylab, ...) if (!is.data.frame(x)) stop("'plot.data.frame' applied to non data frame") if (ncol(x) == 1) { x1 <- x[[1L]] cl <- class(x1) if (cl %in% c("integer", "numeric")) stripchart(x1, ...) else plot(x1, ...) } else if (ncol(x) == 2) { plot2(x, ...) } else { pairs(data.matrix(x), ...) } } <environment: namespace:graphics>
Posso estar equivocado e gostaria de escutar a opinião da comunidade, mas não vejo muito sentido em usar encapsulamento numa linguagem com as características do R. Abs, -- ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ Jose Claudio Faria Estatistica - Prof. Pleno UESC/DCET/Brasil joseclaudio.faria at gmail.com ///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
participantes (3)
-
Benilton Carvalho
-
Jose Claudio Faria
-
Pedro Rafael