[ad_1]
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 parametrosmean
e sd
estamos pré-definido.
set.seed(95) xNOTE: my
curry
function still get a weird error with some functions
that are very general in the arguments they accept, likemax
andsum
.
I’m still figuring that out.There are other packages in R that support currying.
Namelyfunctional
.library(functional) f_rnormPeter Danenberg, o autor do
functional
pacote,
créditos Byron Ellis
para ofunctional::Curry
função.
Eu tenho uma versão mais antiga dealrtools:::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 sobreCurry
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:
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 usaralrtools::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
- A assinatura da função mostra todos os argumentos
- Currying muda a assinatura da função e simplesmente inclui padrões para os argumentos curry
- Você pode adicionar Novo argumentos que antes não estavam na assinatura!
- 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)
- A nova função permanece no namespace da função original, mas ainda está listado no ambiente global
- Mas, lembre-se da advertência que dei acima - ainda estou trabalhando em todos os problemas com
dots
- 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, comofunctional
. 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.)max100Thanks for reading!
Related
[ad_2]