r - 如何使用 R 类型提供程序从公式中的库中调用函数

标签 r f#

我正在学习随机模拟一书中的一些 R 示例,并且熟悉 F# 但不熟悉 R - 我决定尝试 R type provider .

今天我遇到一个代码片段,我不知道如何通过 R 类型提供程序执行。

> Nit = c(0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,6,6,6) 
> AOB = c(4.26,4.15,4.68,6.08,5.87,6.92,6.87,6.25,6.84,6.34,6.56,6.52,7.39,7.38,7.74,7.76,8.14,7.22)
> AOBm=tapply(AOB,Nit,mean) #means of AOB 
> Nitm=tapply(Nit,Nit,mean) #means of Nit 
> fitAOB=lm(AOBm∼ns(Nitm,df=2)) #natural spline 

相应的 F# 代码如下所示:

open System
open System.Linq

open RDotNet
open RProvider
open RProvider.``base``
open RProvider.stats
open RProvider.graphics
open RProvider.splines

let mean (l: float seq) = Seq.sum l / float(Seq.length l)
let Nit = [0;0;0;1;1;1;2;2;2;3;3;3;4;4;4;6;6;6]
let AOB = [4.26;4.15;4.68;6.08;5.87;6.92;6.87;6.25;6.84;6.34;6.56;6.52;7.39;7.38;7.74;7.76;8.14;7.22]
let AOBm = 
    query {
        for x in List.zip AOB Nit do
        groupBy (snd x) into g
        select (g |> Seq.map fst |> mean) } 
    |> List.ofSeq
namedParams [
    "AOBm", AOBm :> obj
    "Nitm", Nit.Distinct() :> obj
]
|> R.data_frame
|> fun data -> R.lm(formula="AOBm~ns(Nitm,df=2)", data=data)

但是,当我尝试执行最后几行以拟合线性模型时,出现异常:

RDotNet.EvaluationException: Error in eval(expr, envir, enclos) : could not find function "ns"

所以我想我要么必须传入

R.ns(Nit.Distinct(),df=2)

进入我的命名参数...或者我应该能够以某种方式将“splines::ns”函数加载到当前环境中...或者我可以以某种方式使用 R.formula(...) .. 然而,到目前为止,我做这些事情的所有尝试都失败了..

那么在使用 R 类型提供程序拟合线性模型时,如何从公式中的库中调用函数?

最佳答案

你需要要么

  • library(splines) 添加到您的 R 代码中,或者

  • 使调用完全合格:splines::ns(...)

但是因为 ns()Formula 对象中使用,所以第一种方法更可取。

关于r - 如何使用 R 类型提供程序从公式中的库中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694040/

相关文章:

R/PLM : Cannot estimate random effects model due to error (system is computationally singular)?

f# - 位图图像处理

f# - 测量单位 - 传入不同单位的重用方法

r - 如何将列表中的特定对象展开.grid以形成新列表

r - 列出 R 数据文件的内容而不加载

r - 不使用 `function` 关键字定义匿名函数

r - Shiny - 逐一加载页面元素

f# - 如何在命令文本中将参数指定为集合

F# Type Provider development : When providing a method, 如何获取变量个数和类型的参数?

f# - Mono AOT/mkbundle是如何使用和优化的? (用于减少虚拟机启动延迟)