我试图使用ISLR包(http://cran.r-project.org/web/packages/ISLR/index.html)。
是否可以使用F#包? 我找到了RProvider 1.1.8(https://www.nuget.org/packages/RProvider/),我尝试了我的第一个F#程序:
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 Studio 2013,RStudio版本0.98.1091,ISLR版本1.0
有关如何使用F#使用ISLR的任何建议都将不胜感激。
答案 0 :(得分:0)
正如其他人所指出的,ISLR包只包含数据集,你绝对可以通过R类型提供程序访问它们。安装包后,以下内容对我有用:
#load "packages/RProvider.fsx"
open RProvider
open RProvider.ISLR
R.Wage.Value // One of the data sets from ISLR
您可以使用完整路径浏览特定包提供的内容:
RProvider.ISLR.R.Wage.Value
如果你可以在R中访问某些内容,而不是在F#中访问,那么我们肯定可以解决这个问题,但我认为ISLR没有问题。值得指出的是,您可能对使用R provider with Deedle感兴趣,它可以让您在R和F#数据帧之间进行互操作。 (安装包含您所需要的所有内容的FsLab package。)
如果您没有安装软件包,您实际上也可以从R提供程序执行此操作: - )
open RProvider.utils
R.install_packages("ISLR")
答案 1 :(得分:0)
我对F#的体验现在是12小时23分14秒。呼!作为C#程序员很长一段时间,这很痛苦。我的工作代码是:
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代码如下:
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)
。我试过了:
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”。我尝试使用“公式”是不正确的,我不知道在这个领域使用什么。
顺便说一句,感谢您使用&#34; Deedle&#34;的建议。我会尝试下一步。
查尔斯