Curry: proposed new functional programming, er, function.
On Wed, May 4, 2011 at 10:40 AM, Ravi Varadhan <rvaradhan at jhmi.edu> wrote:
I too would like this (being an Indian!).
Here is an example that came up just yesterday with regards to solving a quadrature problem using the "cubature" package. ?The adaptIntegrate function does not allow additional arguments via ...
Uwe suggested a work around, but `Curry' would solve it nicely (and it also tastes better!):
Curry = function(FUN,...) {
.orig = list(...)
function(...) do.call(FUN,c(.orig, list(...)))
}
require(cubature)
f <- function(x, a) cos(2*pi*x*a) ?# a simple test function
# this works
a <- 0.2
adaptIntegrate(function(x, argA=a) f(x, a=argA), lower=0, upper=2)
# but this doesn't work
rm(a)
adaptIntegrate(function(x, argA=a) f(x, a=argA), lower=0, upper=2, a=0.2)
# Use of Curry
adaptIntegrate(Curry(f, a=0.2), lower=0, upper=2)
Here is another approach. If we preface any function with gsubfn's fn$ then it will turn formulas (subject to certain rules to determine which to pay attention to) into functions. 1. Here it is applied to the cubature example
library(cubature) library(gsubfn)
Loading required package: proto
fn$adaptIntegrate(~ f(x, 0.2), lower=0, upper=2)
$integral [1] 0.4677446 $error [1] 1.247382e-14 $functionEvaluations [1] 15 $returnCode [1] 0 2. and here is the heatmap example redone. The example line is to compute x so that the code is self contained: library(gsubfn) example(heatmap) fn$heatmap(x, hclustfun = ~ hclust(x, method="average"))
Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com