All,

As someone who uses both R and Haskell and a Mac in my day job, I am very 
excited by the news that this now works on Macs.

> http://tweag.github.io/HaskellR/ <http://tweag.github.io/HaskellR/>
For example, if I want to use Nelder-Mead in Haskell then all I have to do is 
the code below most of which is boilerplate and took me about 20 minutes. 
Plotting is also supported although I tend to use the the native Haskell charts 
package most of the time.

Oh and the answer is

> (505.0,1.000035627670639,-6.432963549964604e-4,2.105887833352907e-6,69,0)


Not bad but not brilliant but it is Nelder-Mead after all.

> {-# LANGUAGE QuasiQuotes #-}
> 
> import H.Prelude as H
> import Language.R.QQ
> 
> import qualified Foreign.R as R
> import qualified Foreign.R.Type as R
> 
> import Data.Int
> import Control.DeepSeq
> 
> xs, ys :: [Double]
> xs = [1.0..10.0]
> ys = [1.0..10.0]
> 
> cost :: Double -> Double -> Double
> cost m c =
>   sum $
>   map (^2) $
>   zipWith (-) (map (\x -> m * x + c) xs) ys
> 
> nmMin :: IO (Double, Double, Double, Double, Int32, Int32)
> nmMin = runRegion $ do
>   initParms <- [r| c(2.0,1.0) |]
>   initVal   <- H.fromSEXP . R.cast R.SReal <$>
>                [r| (function(v) costH_hs(v[1], v[2])) (initParms_hs) |]
>   relaxMin <- [r| optimx(c(2.0,1.0), function(v) costH_hs(v[1], v[2]), method 
> = "Nelder-Mead") |]
>   mMin     <- H.fromSEXP . R.cast R.SReal <$> [r| relaxMin_hs$p1 |]
>   cMin     <- H.fromSEXP . R.cast R.SReal <$> [r| relaxMin_hs$p2 |]
>   vMin     <- H.fromSEXP . R.cast R.SReal <$> [r| relaxMin_hs$value |]
>   fEvals   <- H.fromSEXP . R.cast R.SInt  <$> [r| 
> as.integer(relaxMin_hs$fevals) |]
>   convCode <- H.fromSEXP . R.cast R.SInt  <$> [r| 
> as.integer(relaxMin_hs$convcode) |]
>   return $!! (initVal, mMin, cMin, vMin, fEvals, convCode)
>   where
>     costH :: Double -> Double -> R s Double
>     costH m c = return $ cost m c
> 
> main :: IO ()
> main =
>   withEmbeddedR defaultConfig $ do
>     runRegion $ do
>       _ <- [r| install.packages(c("numDeriv", "optimx"), repos = 
> "http://cran.us.r-project.org";) |]
>       _ <- [r| library('numDeriv') |]
>       _ <- [r| library('optimx') |]
>       return ()
>     results <- nmMin
>     putStrLn $ Prelude.show results



Dominic Steinitz
domi...@steinitz.org
http://idontgetoutmuch.wordpress.com


        [[alternative HTML version deleted]]

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to