首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R带有RProvider和F#的统计软件包ISLR

R带有RProvider和F#的统计软件包ISLR
EN

Stack Overflow用户
提问于 2015-03-25 00:32:38
回答 2查看 363关注 0票数 0

我尝试使用ISLR包(http://cran.r-project.org/web/packages/ISLR/index.html)。

可以将该包与F#一起使用吗?我找到了RProvider 1.1.8 (https://www.nuget.org/packages/RProvider/),并尝试了我的第一个F#程序:

代码语言:javascript
复制
open System
open RDotNet
open RProvider
open RProvider.``base``
open RProvider.graphics
open RProvider.stats
// open RProvider.ISLR

let rng = Random()
let rand () = rng.NextDouble()
let X1s = [ for i in 0 .. 9 -> 10. * rand () ]
let X2s = [ for i in 0 .. 9 -> 5. * rand () ]

// Build Ys, following the "true" model
let Ys = [ for i in 0 .. 9 -> 5. + 3. * X1s.[i] - 2. * X2s.[i] + rand () ]

let dataset =
    namedParams [
        "Y", box Ys;
        "X1", box X1s;
        "X2", box X2s; ]
    |> R.data_frame

let result = R.lm(formula = "Y~X1+X2", data = dataset)
R.plot result

这个程序运行得很好。然而,当我尝试使用ISLR (注释掉“open RProvider.stats”)时,F#抱怨说找不到“lm”。我希望使用ISLR的“lm”版本,它应该是ISLR的一部分

我的环境是: Visual Studio2013,RStudio版本0.98.1091,ISLR1.0

任何关于如何在F#中使用ISLR的建议都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2015-03-25 03:31:28

正如其他人指出的那样,ISLR包只包含数据集,您绝对可以通过R类型提供程序访问这些数据集。在安装了这个包之后,我使用了以下方法:

代码语言:javascript
复制
#load "packages/RProvider.fsx"
open RProvider
open RProvider.ISLR

R.Wage.Value // One of the data sets from ISLR

您可以使用完整路径浏览特定包提供的内容:

代码语言:javascript
复制
RProvider.ISLR.R.Wage.Value

如果有一些东西你可以在R中访问,但不能在F#中访问,那么我们肯定可以解决这个问题,但我认为ISLR没有问题。值得指出的是,您可能会对使用R provider with Deedle感兴趣,它使您可以在R和F#数据帧之间进行互操作。(安装包含所有所需内容的FsLab package。)

如果你还没有安装这个包,你也可以通过R provider来安装:-)

代码语言:javascript
复制
open RProvider.utils
R.install_packages("ISLR")
票数 0
EN

Stack Overflow用户

发布于 2015-03-26 23:08:16

我使用F#的时间是12小时23分14秒。呼!作为一个长期的C#程序员,这是痛苦的。我的工作代码是:

代码语言:javascript
复制
open System
open System.Diagnostics
open RDotNet
open RProvider
open RProvider.``base``
open RProvider.graphics
open RProvider.stats
open RProvider.e1071

let x = array2D [ [  0.4992207;  0.83459057 ];
                  [  0.5095988;  0.86535664 ];
                  [ -0.3130123; -0.54000741 ];
                  [  0.7136758;  0.09454017 ];
                  [ -1.0506291; -0.49390571 ];
                  [ -0.7504743;  0.19165412 ];
                  [ -0.3502830; -0.16827662 ];
                  [  0.6202636; -0.03877393 ];
                  [ -0.2169360;  0.03409674 ];
                  [ -0.2485535;  0.68234694 ];
                  [  1.3264276;  1.40061717 ];
                  [  0.6886685;  1.38550956 ];
                  [  2.7057305;  1.52631182 ];
                  [  2.3354574; -0.49779748 ];
                  [ -1.3406379;  2.20544301 ];
                  [  1.2445945; -0.18418390 ];
                  [  0.7721881;  1.53916368 ];
                  [ -0.3640324;  2.32334502 ];
                  [  1.6404738;  1.17708567 ];
                  [ -1.0440209;  1.95016425 ] ]

let y = [| -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1 |]

let colors = Array.create y.Length 0
for k=0 to (Array.length y)-1 do colors.[k] <- y.[k] + 3;
let pch = 19

let status = R.plot(namedParams [ "x", box x; "col", box colors; "pch", box pch; "xlab", box "x[,1]"; "ylab", box "x[,2]"])

let args =
    namedParams [
        "formula", box "y~.";
        "x", box x;
        "y", box y;
        "type", box "C-classification";
        "kernel", box "linear";
        "cost", box 10;
        "scale", box false]

let svmfit = R.svm(args)
R.print(svmfit) |> ignore

我相信你们会嘲笑我的所作所为的;但是,见鬼,我的名声已经受到致命的伤害。

我还在和一个问题作斗争。绘制“svm”函数结果的R代码如下所示:

代码语言:javascript
复制
library(e1071)
df = data.frame(x, y = as.factor(y))
svmfit = svm(y~., data=df, kernel="linear", cost=10, scale=FALSE)
print(svmfit)
plot(svmfit, df)

我的问题是如何转换:plot(svmfit, df)。我试过了:

代码语言:javascript
复制
let labels = R.as_factor(y)
let df = 
    namedParams [
        "x", box x;
        "data", box labels ]
    |> R.data_frame

let arg =
    namedParams [
        "formula", box svmfit;
        "data", box df
    ]

R.plot(arg)

但这并不管用。我不知道如何声明“svmfit”。我尝试使用“公式”是不正确的,我不知道在这个领域使用什么。

顺便说一句,谢谢你建议我使用"Deedle“。下一步我将尝试这样做。

查尔斯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29238042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档