Funções Curried | R-bloggers

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[This article was first published on TeachR, and kindly contributed to R-bloggers]. (Você pode relatar problemas sobre o conteúdo desta página aqui)


Quer compartilhar seu conteúdo em R-bloggers? clique aqui se você tiver um blog, ou aqui se não tiver.

Não, não estamos falando de jantar,
embora este post esteja me dando ideias sobre
o que eu deveria almoçar.

Para ler sobre o que realmente significa currying de função,
consulte a página da Wikipedia.
(E enquanto você estiver lá, faça uma doação
já!)

Basicamente, você assume uma função de vários argumentos
e reduzi-lo a uma função com um argumento.
Eu provavelmente uso o termo incorretamente, porque também
considere currying para cobrir qualquer redução no número
de argumentos de função, não apenas um.

Aqui está um exemplo. Estou usando o curry função
do meu pacote R pessoal.

library(alrtools)
my_rnorm 

Agora, toda vez que eu uso my_rnorm os parametros
mean e sd estamos pré-definido.

set.seed(95)
x 

NOTE: my curry function still get a weird error with some functions
that are very general in the arguments they accept, like max and sum.
I’m still figuring that out.

There are other packages in R that support currying.
Namely functional.

library(functional)
f_rnorm 

Peter Danenberg, o autor do functional pacote,
créditos Byron Ellis
para o functional::Curry função.
Eu tenho uma versão mais antiga de alrtools:::curry_v1
que copiei da mesma fonte. Tempos divertidos.

Então, se isso existe desde 2007,
por que estou blogando sobre isso?
Porque Eu finalmente resolvi algo chato sobre Curry
e mal posso esperar para compartilhar (com as duas pessoas que vão ler isso).

Verifique as assinaturas de função para as duas funções curried e a original:

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
args(f_rnorm)
## function (...) 
args(my_rnorm)
## function (n, mean = 100, sd = 200) 
args(rnorm)
## function (n, mean = 0, sd = 1) 

f_rnorm não diz nada sobre os argumentos que sobraram,
ou o padrões que foram definidas no processo de currying.
Na maioria das vezes, ninguém se importa porque você acabou de criar a função curried
então por que você deve ter esquecido os detalhes sobre isso?
Sim, é verdade, mas eu quero usar alrtools::curry para fornecer código para outro
pessoas usarem e podem gostar das dicas visuais.

Aqui estão algumas coisas legais sobre minha nova versão do curry

  1. A assinatura da função mostra todos os argumentos
  2. Currying muda a assinatura da função e simplesmente inclui padrões para os argumentos curry
  3. Você pode adicionar Novo argumentos que antes não estavam na assinatura!
  4. Você pode substituir os argumentos curried se você quiser (porque o currying é feito especificando-se valores padrão em vez de armazenar os valores padrão no fechamento)
  5. A nova função permanece no namespace da função original, mas ainda está listado no ambiente global
  6. Mas, lembre-se da advertência que dei acima - ainda estou trabalhando em todos os problemas com dots
  7. Eu não testei isso ainda, mas tenho certeza de que argumentos curry serão capazes de fazer referência a outros argumentos, como na assinatura da função de dgamma

Apenas uma nota para aqueles que gostam deste tópico, mas preferem usar
um pacote mais confiável, como functional. Você ainda pode chegar em
todas as informações que você deseja dentro do encerramento da função.
R permite que você os examine e eu mostrarei como.
(Além disso, meu pacote está licenciado como CC0, então você pode roubar o código
e use-o onde quiser também. Eu não me importo. A atribuição é boa.)

max100 

Thanks for reading!



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Leia Também  Como visualizar dados de série temporal: previsão arrumada em R