到 2015 2015年 7 月

30 卷數 7

R 程式設計語言-R C# 程式師介紹

James McCaffrey

R 語言用於由資料科學家和程式師統計計算。部分由於不斷增加的大量軟體系統和需要分析的資料收集的資料,R 是同事使用 C# 中增長最快的技術之一。R 的熟悉可以是您的技術技能集寶貴的補充。

R 語言是 GNU 專案,是免費軟體。R 從一種語言被稱為的 S (為"統計資料"),在貝爾實驗室成立于上世紀 70 年代。有很多優秀的線上教程,,但大多數這些教程假設你是一個大學學生學習統計。這篇文章旨在説明 C# 程式師盡可能快地得到加速研發。

看這篇文章將走向何方是最好是去看一看示例 R 會話中圖 1。示例會話有兩個不相關的主題。第一幾組命令顯示所謂的卡方檢驗 (也稱為卡方檢驗) 為均勻分佈。命令的第二套顯示的線性回歸,這在我看來是 Hello World 技術統計計算的示例。

一個示例 R 會話
圖 1 一個示例 R 會話

R 網站位於 r 如。該網站有連結到幾個鏡像網站,在那裡你可以下載並安裝鋼筋 安裝是一個簡單的自解壓可執行檔。R 是官方支援的Windows XP上以後,和也在非 Windows 平臺上最常見。在 Windows 7 和 Windows 8 的機器沒有任何問題,我已經安裝了 R。預設情況下安裝過程給你 32 位和 64 位版本。

這篇文章假設你有至少中間的 C# 程式設計技巧 (以便您可以瞭解 C# 與 R 之間異同的解釋),但並不認為你知道任何關於 R. 它的全部內容,也是可用的從本文附帶的下載檔案介紹了 C# 演示程式。

卡方檢驗使用 R

看著圖 1,首先要注意是使用 R 是很有點不同于使用 C#。雖然它可以編寫腳本,R,R 是最常用在交互模式下在命令外殼程式。第一個示例中 R 是分析,看看如果一個正常的六面骰子是公平的或不。當滾多次,公平的模具將預計給大約相同的計數每個六個可能的結果。

R 提示符表示由 (>) 標記在外殼中。第一個語句中鍵入圖 1 以 (#) 字元,是要顯示注釋的 R 標記開頭。

示例會話中第一次實際的命令是:

> observed <- c(20, 28, 12, 32, 22, 36)

這將創建向量觀測使用 c 命名 (為串聯) 功能。一個向量包含物件具有相同的資料類型。將大致相當的 C# 語句:

var observed = new int[] { 20, 28, 12, 32, 22, 36 };

第一個值 20,是一個地方發生,28 是兩元,所以發生次數次數。六項罪名的總和是 20 + 28 +。. + 36 = 150. 你會期待公平的模具有大約 150/6 = 25 計數每個可能的結果。但觀察到的三個點 (12) 數目看起來可疑的低。

創建向量後, 卡方檢驗是使用 chisq.test 函數來執行的:

> chisq.test(observed)

,點 (.) 字元常用而不是底線 (_) 字元來創建更易於讀取的變數和函數名稱。調用 chisq.test 函數的結果是文本的相當多:

卡方檢驗給出了概率

data:  observed
X-squared = 15.28, df = 5, p-value = 0.009231

在 C# 術語中,大多數 R 函數返回一個資料結構,可以忽略,但也包含許多 Console.WriteLine 等效的語句使輸出。請注意,它取決於你要解讀的含義 R 輸出。後來在這篇文章,看看你如何創建等效的卡方檢驗使用原始 (沒有庫) 的 C# 代碼。

在此示例中,' X 平方 ' 15.28 值計算 χ 2 統計 (希臘信志類似大寫 X)。值為 0.0 表示觀察的值完全是你期望,如果模具是公平。Χ 2 的較大值指示觀察的計數可能不發生的機會如果模具是公平的可能性越來越大。5 的 df 值是"自由度",這是一個小於觀測值的數目。Df 是不太重要了,這種分析。

0.009231 p 值是如果該模具是公平,可能偶然發生的觀察的計數的概率。因為 p 值太小,不到 1%,你就會發現觀測的值是很可能不會偶然發生,因此,那裡是模具問題最有可能有偏見的統計證據。

線性迴歸分析使用 R

語句中的第二套圖 1 顯示線性回歸的一個示例。線性回歸是一種用於描述數值變數 (在統計中稱為因變數) 與一個或多個解釋變數 (稱為獨立變數),可以是數位或分類之間的關係的統計技術。只是一個獨立的解釋性預測變數時,這項技術被稱為簡單線性回歸。當有兩個或更多的獨立變數,在演示示例中,技術被稱為多元線性迴歸分析。

在做之前的線性迴歸分析,我創建了八個專案,以逗號分隔文字檔命名 DummyData.txt 在此內容目錄 C:\IntroToR 中:

Color,Length,Width,Rate
blue, 5.4, 1.8, 0.9
blue, 4.8, 1.5, 0.7
blue, 4.9, 1.6, 0.8
pink, 5.0, 1.9, 0.4
pink, 5.2, 1.5, 0.3
pink, 4.7, 1.9, 0.4
teal, 3.7, 2.2, 1.4
teal, 4.2, 1.9, 1.2

此檔被應該代表花資料與顏色的花,長度和寬度的花瓣和增長速度。這個想法是預測率值 (在最後一列中) 從顏色、 長度和寬度值。注釋語句後的線性迴歸分析中的前三個 R 命令是:

> setwd("C:\\IntroToR")
> data <- read.table("DummyData.txt",
  header=TRUE, sep=",")
> print(data)

第一個命令設置的工作目錄,這樣我就不必完全限定源資料檔案的路徑。而不是使用 (\) 標記,通常是使用 C#,我能有作為 (/) 是共同在非 Windows 平臺上。

第二個命令將資料載入到記憶體中一個名為 data 的表物件。請注意,R 使用命名的參數。標頭參數告訴是否第一行是標題資訊 (TRUE 或 T 以縮短的形式),或不 (FALSE 或 F)。R 是區分大小寫,您通常可以使用任一 (<-) 運算子來指定值或 (=) 運算子。選擇是主要是個人喜好的問題。我通常使用 (<-) 為物件分配和 (=) 為參數賦值。

Sep (分隔符號) 參數指示值在每一行上的如何分隔開。例如,(\t) 就表示定位字元分隔的值,和 (" ") 會顯示空格分隔的值。

列印功能顯示記憶體中的資料的表。列印功能有多個可選參數。請注意,在輸出圖 1 顯示資料項目目索引從 1 開始的。 為數組、 矩陣和物件的指數,R 是基於 1 的語言,而不是基於 0 的像 C# 語言。

與這兩個 R 命令進行線性迴歸分析:

> model <- lm(data$Rate ~ (data$Color + data$Length + data$Width))
> summary(model)

你可以解釋為,第一個命令"存儲到一個名為物件模型的變數來預測哪裡率列在表物件中的 lm (線性模型) 功能分析結果 (資料 $率),和獨立預測變數是顏色、 長度和寬度."第二個命令意味著,"顯示只是基本的存儲在名為模型的物件中的分析結果"。

Lm 函數生成大量的資訊。假如你想要預測率值,當輸入的值,則顏色 = 粉紅色,長度 = 5.0 和寬度 = 1.9。(注意,這對應于資料項目目 [4],實際速度值為 0.4)。若要使預測你將使用的估計列中的值:

Coefficients:
               Estimate Std. Error t value Pr(>|t|)
(Intercept)    -0.14758    0.48286  -0.306  0.77986
data$Colorpink -0.49083    0.04507 -10.891  0.00166 **
data$Colorteal  0.35672    0.09990   3.571  0.03754 *
data$Length     0.04159    0.07876   0.528  0.63406
data$Width      0.45200    0.11973   3.775  0.03255 *

如果 X 表示引數的值,和 Y 代表預測的比率低,然後:

X = (blue = NA, pink = 1, teal = 0, Length = 5.0, Width = 1.9)
Y = -0.14758 + (-0.49083)(1) + (0.35672)(0) + (0.04159)(5.0) + (0.45200)(1.9)
  = -0.14758 + (-0.49083) + (0) + (0.20795) + (0.85880)
  = 0.42834

注意到預測的比率低,0.43,是相當接近的實際速率,0.40。

換句話說,要使用的模型,預測你計算線性乘積和的估計值乘以相應的 X 值。截距值是一個常數,不與任何變數相關聯。當你有明確的解釋變數時,值之一下降 (在這種情況下藍色)。

底部的輸出顯示資訊指示如何很好的獨立變數,顏色、 長度和寬度的解釋變數,率:

Residual standard error: 0.05179 on 3 degrees of freedom
Multiple R-squared:  0.9927,    Adjusted R-squared:  0.9829
F-statistic: 101.6 on 4 and 3 DF,  p-value: 0.00156

多個 R 平方值 (0.9927) 是解釋變數的線性組合的因變數變化的百分比。略有不同,R 平方是一個介於 0 和 1 之間的值在較高的值意味著更好的預測模型。在這裡,R 平方值是極高,指示顏色、 長度和寬度可以非常準確地預測率。F-統計量,調整後的 R 平方值和 p 值是模型擬合的其他措施。

在此示例中點之一就是你最大的挑戰到目前為止理解統計程式設計使用 R,­背後的語言功能的抽搐。大多數人瞭解 R 以增量的方式,通過一次添加一個技術的知識,需要回答一些具體的問題。C# 類比,將瞭解各種集合中的物件在 Collections.Generic 命名空間,如雜湊表和佇列類。大多數開發人員學習約一個資料結構在一段時間,而不是試圖記住所有類之前在專案中使用其中的任何資訊。

另一個卡方檢驗

在卡方檢驗的類型圖 1 通常稱為測試為均勻分佈因為它測試如果觀測到的資料都有同等的計數; 那就是,如果資料均勻分佈。有幾個其他種類的卡方檢驗測試,其中包括一個叫做獨立卡方檢驗。

假設你有一群 100 人,你有興趣,如果性別 (男,女) 是獨立于政治黨派 (民主黨,共和黨、 其他)。想像你的資料是在一個應急的矩陣中所示圖 2。看來,也許男性更有可能是共和黨人,比女性。

圖 2 應變矩陣

  數位高程模型 Rep 其他  
男性 15 25 10 50
女性 30 15 5 50
  45 40 15 100

若要使用 R 如果兩個因素、 性別及從屬關係,是統計獨立測試,你會首先資料放入一個數值矩陣與此命令:

> cm <- matrix( c(15,30,25,15,10,5), nrow=2, ncol=3 )

而不是在 C# 的行 (從左至右、 從上到下),注意到在 R,矩陣存儲資料的列 (從上到下,從左至右)。

R 卡方檢驗命令是:

> chisq.test(cm)

P 值的測試結果是 0.01022,表明,在 5%顯著性水準,這兩個因素並非獨立。換句話說,是性愛和隸屬關係之間的統計關係。

注意到在第一的卡方檢驗骰子示例中,輸入的參數是一個向量,但在第二次的性別隸屬關係示例中,輸入是一個矩陣。Chisq.test 函數共有七個參數,需要一個 (一個向量或矩陣),其次是六個可選的具名引數。

像許多的 C# 方法在 Microsoft.NET 框架命名空間中,大多數的 R 函數是嚴重超載。在 C# 中,重載通常實現使用多種方法具有相同名稱但使用不同的參數。泛型的使用也是一種形式的重載。在 R,重載實現使用單個函數與許多可選具名引數。

R 圖

作為一個 C# 程式師,當我想要一些程式圖輸出資料,我通常運行我的程式,複製輸出資料,Ctrl + V 粘貼到記事本中,要刪除怪異的控制字元,資料將資料複製、 粘貼到 excel 中,然後創建使用 Excel 圖表。這是有點變態,但它在大多數情況下工作正常。

R 系統的優勢之一是其本機能夠生成關係圖。看看一個例子圖 3。這是圖形的某種的一種不太可能在 Excel 中沒有外接程式中類型。

三維圖使用 R
圖 3 三維圖使用 R

除了在所示的外殼程式圖 1,R 也有半 GUI 介面,RGui.exe,用於當你想要使圖。

在圖圖 3 顯示函數 z = f(x,y) = x * e ^ (-(x ^2 + y ^2))。前三個的 R 命令,以生成關係圖如下:

> rm(list=ls())
> x <- seq(-2, 2, length=25)
> y <- seq(-2, 2, length=25)

Rm 功能從記憶體中的當前工作區中刪除物件。使用的命令是 R 的魔法咒語,若要刪除所有物件。第二和第三個命令創建向量的 25 項值,間隔均勻,從-2 到 + 2 包容性。我也可以用功能相反。

接下來兩個命令是:

> f <- function(x,y) { x * exp(-(x^2
  + y^2)) }
> z <- outer(x,y,f)

第一個命令演示如何在 R 中定義的函數使用函數關鍵字。內置的 R 函數命名外創建的值使用向量矩陣 x 和 y 和函式定義 f。 結果是,每個儲存格中的值是對應于 x 的函數 f 的值 25 × 25 矩陣和 y。

接下來兩個命令是:

> nrz <- nrow(z)
> ncz <- ncol(z)

Nrow 和 ncol 函數在其矩陣參數中返回的行數或列數。在這裡,這兩個值將是 25。

下一個 R 命令使用 colorRampPalette 函數來創建自訂色彩坡形調板來繪製關係圖:

> jet.colors <- colorRampPalette(c("midnightblue", "blue",
+ "cyan", "green", "yellow", "orange", "red", "darkred"))

在 R,鍵入排著長隊,如果你回車 < > 時 關鍵,該系統將跳轉到下一行游標並放置一個 + 人物作為一個提示,以指示您的命令不是完整。下一個:

> nbcol <- 64
> color <- jet.colors(nbcol)

結果這兩個命令命名顏色包含 64 個不同的顏色值向量從很深的藍色,綠色和黃色,通過一個非常暗紅色。下一個:

> zfacet <- z[-1,-1] + z[-1,-ncz] + z[-nrz,-1] + z[-nrz,-ncz]
> facetcol <- cut(zfacet,nbcol)

如果你仔細觀察在中圖圖 3,你會看到表面由 25 × 25 = 625 的小方塊或小平面。兩個前面的指令創建 25 × 25 矩陣中每個儲存格的值在哪裡 64 種顏色用於相應表面面之一。

最後,使用實踐性 (看圖) 功能,顯示 3D 圖形:

> persp(x,y,z, col=color[facetcol], phi=20, theta=-35,
+ ticktype="detailed", d=5, r=1, shade=0.1, expand=0.7)

培育功能有很多可選,具名引數。Col 參數是顏色或要使用的顏色。參數 φ 和 θ 設置視角 (左和右,起起伏伏) 的關係圖。參數 ticktype 控制項如何值 x,y 和 Z 軸的顯示。參數 r 和 d 控制感知的眼距離圖,和感知的 3D 效果。名為樹蔭下控制項的參數類比網底從虛擬的光源。命名的參數展開控制項的高度和寬度圖的比例。實踐性函數有很多更多的參數,但這裡用的就是在大多數情況下足夠。

本示例指出 R 已經非常強大和靈活的本機圖形功能,但他們往往較低的水準,需要相當多的努力。

在 C# 中的卡方檢驗

要瞭解 R 語言分析和 C# 程式設計語言的異同,就有用來檢查 C# 實現的卡方檢驗。此外,C# 代碼可以做出不錯的除了你個人代碼庫。看看 C# 演示程式中圖 4

使用 C# 的圖 4 卡方檢驗
使用 C# 的圖 4 卡方檢驗

該演示程式接近 R 語言骰子檢定所示圖 1。請注意 C# 演示的輸出值是完全相同的 R 會話。

若要創建該演示程式,我發起Visual Studio,創建一個新 C# 主控台應用程式專案名叫愷思博特。範本代碼載入到編輯器後,在解決方案資源管理器視窗中右擊 Program.cs 檔改名為 ChiSquareProgram.cs 和允許Visual Studio,自動將類程式重命名為 ChiSquareProgram。

中列出完整的 C# 演示程式圖 5。你會注意到的原始程式碼是比你想像的更長。執行統計程式設計使用原始 C# 並不是極其困難的但代碼更傾向于長。

圖 5 C# 卡演示程式

using System;
namespace ChiSquare
{
  class ChiSquareProgram
  {
    static void Main(string[] args)
    {
      try
      {
        Console.WriteLine("\nBegin Chi-square test using C# demo\n");
        Console.WriteLine(
          "Goal is to see if one die from a set of dice is biased or not\n");
        int[] observed = new int[] { 20, 28, 12, 32, 22, 36 };
        Console.WriteLine("\nStarting chi-square test");
        double p = ChiSquareTest(observed);
        Console.WriteLine("\nChi-square test complete");
        double crit = 0.05;
        if (p < crit)
        {
          Console.WriteLine("\nBecause p-value is below critical value of " +
            crit.ToString("F2"));
          Console.WriteLine("the null hypothsis is rejected and we conclude");
          Console.WriteLine("the data is unlikely to have happened by chance.");
        }
        else
        {
          Console.WriteLine("\nBecause p-value is not below critical value of " +
            crit.ToString("F2"));
          Console.WriteLine(
            "the null hypothsis is accepted (not rejected) and we conclude");
          Console.WriteLine("the observed data could have happened by chance.");
        }
        Console.WriteLine("\nEnd\n");
        Console.ReadLine();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
        Console.ReadLine();
      }
    } // Main
    static void ShowVector(int[] v)
    {
      for (int i = 0; i < v.Length; ++i)
        Console.Write(v[i] + " ");
      Console.WriteLine("");
    }
    static double ChiSquareTest(int[] observed)
    {
      Console.WriteLine("Observed frequencies are: ");
      ShowVector(observed);
      double x = ChiSquareStatistic(observed);
      Console.WriteLine("\nX-squared = " + x.ToString("F2"));
      int df = observed.Length - 1;
      Console.WriteLine("\ndf = " + df);
      double p = ChiSquareProb(x, df);
      Console.WriteLine("\np-value = " + p.ToString("F6"));
      return p;
    }
    static double ChiSquareStatistic(int[] observed)
    {
      double sumObs = 0.0;
      for (int i = 0; i < observed.Length; ++i)
        sumObs += observed[i];
      double expected = (int)(sumObs / observed.Length);
      double result = 0.0;
      for (int i = 0; i < observed.Length; ++i)
      {
        result += ((observed[i] - expected) *
         (observed[i] - expected)) / expected;
      }
      return result;
    }
    public static double ChiSquareProb(double x, int df)
    {
      // x = a computed chi-square value. df = degrees of freedom.
      // output = prob. the x value occurred by chance.
      // So, for example, if result < 0.05 there is only a 5% chance
      // that the x value occurred by chance and, therefore,
      // we conclude that the actual data which produced x is
      // NOT the same as the expected data.
      // This function can be used to create a ChiSquareTest procedure.
      // ACM Algorithm 299 and update ACM TOMS June 1985.
      // Uses custom Exp() function below.
      if (x <= 0.0 || df < 1)
        throw new Exception("parameter x must be positive " +
        "and parameter df must be 1 or greater in ChiSquaredProb()");
      double a = 0.0; // 299 variable names
      double y = 0.0;
      double s = 0.0;
      double z = 0.0;
      double e = 0.0;
      double c;
      bool even; // Is df even?
      a = 0.5 * x;
      if (df % 2 == 0) even = true; else even = false;
      if (df > 1) y = Exp(-a); // ACM update remark (4)
      if (even == true) s = y; else s = 2.0 * Gauss(-Math.Sqrt(x));
      if (df > 2)
      {
        x = 0.5 * (df - 1.0);
        if (even == true) z = 1.0; else z = 0.5;
        if (a > 40.0) // ACM remark (5)
        {
          if (even == true) e = 0.0;
          else e = 0.5723649429247000870717135;
          c = Math.Log(a); // log base e
          while (z <= x)
          {
            e = Math.Log(z) + e;
            s = s + Exp(c * z - a - e); // ACM update remark (6)
            z = z + 1.0;
          }
          return s;
        } // a > 40.0
        else
        {
          if (even == true) e = 1.0;
          else e = 0.5641895835477562869480795 / Math.Sqrt(a);
          c = 0.0;
          while (z <= x)
          {
            e = e * (a / z); // ACM update remark (7)
            c = c + e;
            z = z + 1.0;
          }
          return c * y + s;
        }
      } // df > 2
      else
      {
        return s;
      }
    } // ChiSquare()
    private static double Exp(double x) // ACM update remark (3)
    {
      if (x < -40.0) // ACM update remark (8)
        return 0.0;
      else
        return Math.Exp(x);
    }
    public static double Gauss(double z)
    {
      // input = z-value (-inf to +inf)
      // output = p under Normal curve from -inf to z
      // e.g., if z = 0.0, function returns 0.5000
      // ACM Algorithm #209
      double y; // 209 scratch variable
      double p; // result. called 'z' in 209
      double w; // 209 scratch variable
      if (z == 0.0)
        p = 0.0;
      else
      {
        y = Math.Abs(z) / 2;
        if (y >= 3.0)
        {
          p = 1.0;
        }
        else if (y < 1.0)
        {
          w = y * y;
          p = ((((((((0.000124818987 * w
            - 0.001075204047) * w + 0.005198775019) * w
            - 0.019198292004) * w + 0.059054035642) * w
            - 0.151968751364) * w + 0.319152932694) * w
            - 0.531923007300) * w + 0.797884560593) * y * 2.0;
        }
        else
        {
          y = y - 2.0;
          p = (((((((((((((-0.000045255659 * y
            + 0.000152529290) * y - 0.000019538132) * y
            - 0.000676904986) * y + 0.001390604284) * y
            - 0.000794620820) * y - 0.002034254874) * y
            + 0.006549791214) * y - 0.010557625006) * y
            + 0.011630447319) * y - 0.009279453341) * y
            + 0.005353579108) * y - 0.002141268741) * y
            + 0.000535310849) * y + 0.999936657524;
        }
      }
      if (z > 0.0)
        return (p + 1.0) / 2;
      else
        return (1.0 - p) / 2;
    } // Gauss()
  } // Program class
} // ns

Main 方法大多由 WriteLine 語句組成。基本的調用代碼是:

int[] observed = new int[] { 20, 28, 12, 32, 22, 36 };
double p = ChiSquareTest(observed);
double crit = 0.05;
if (p < crit) {
  // Messages
} else {
  // Messages
}

C# 卡方檢驗接受觀測值的陣列,計算卡方檢驗統計值並顯示它; 計算和顯示度的自由; 和計算,並返回 p 值。

方法 ChiSquareTest 調用三個説明器方法:

ShowVector(observed);
double x = ChiSquareStatistic(observed);
int df = observed.Length - 1;
double p = ChiSquareProb(x, df);

方法 ShowVector 顯示輸入的向量,類似于使用 R chisq.test 函數的回顯輸入的參數的方法­彼得值。方法 ChiSquareStatistic 返回計算卡方 ("X-平方 ' R 輸出中),和方法愷思博特­問題從 ChiSquareStatistic 返回用於計算的概率 (p-在"值"R 輸出)。

方法 ChiSquareStatistic 是一個簡單的測試,為均勻分佈。Χ 2 統計的統計計算公式是:

chi-squared = Sum( (observed - expected)^2 / expected )

所以,在計算 χ 2 之前, 你需要計算值與實測值相關聯的預期值。如前所述,做到這一點你加起來計數值中觀察到的陣列 (150 在演示中),然後除以這筆款項 (6 在演示),陣列中的值的數量預期值 (25) 給所有儲存格。

寫卡方檢驗的最困難部分是 p 值的計算。如果您掃描方法愷思博特的定義­問題在圖 5,你很快就會發現它深,需要專門的知識。此外,該方法調用一個名為是同樣複雜的高斯的説明器方法。

編碼複雜的數值函數是其實很簡單,因為幾十年來解決了大部分的職能。兩個我最常用的資源是美國電腦協會 (ACM) 收集演算法庫協會和"手冊的數學函數"阿布和 Stegun (多佛出版物,1965年) — — 如此出名,它常常只是叫做"A & S."這兩個引用在 Web 上的幾個地方都是免費提供。

例如,ChiSquareProb 方法實現 ACM 演算法 #299 和説明器方法,高斯,實現 ACM 演算法 #209。 ACM #209 的替代方法是 A & S 方程 #7.1.26 加上一個簡單的包裝聲明。

許多的 ACM 演算法中的函數和 A & S 是實施­加味現有 C# 圖書館; 然而,這些庫大多相當大。如果可能的話,我更願意從零開始,使用的方法只是我需要和代碼避免外部依賴項。

幾個評論

這篇文章顯示的 R 語言只有一小部分,但它應該足以讓你啟動並運行。C# 程式師傾向于接觸 R 兩種方式。首先,可以使用 R 來執行您自己的統計分析。如本文所示,使用 R 是相當容易的假設你把握的基本統計數字。第二,您可能需要與作為其主要的語言,用 R 的人進行交互,因此需要瞭解研發環境和術語。

有幾個 R 語言集成開發工具可以使用。一知名專案叫做 RStudio。我通常更喜歡使用本機的 R 主控台。幾個 Microsoft 產品工作與。 例如,微軟 Azure 機器學習服務可以使用 R 語言腳本,我懷疑支援研發將被添加到Visual Studio在一些點。


Dr. James McCaffrey* 適合在雷德蒙的微軟研究院  他曾在幾個 Microsoft 產品包括 Internet Explorer 和冰。 博士。 麥卡弗裡可達到 jammc@microsoft.com。*

感謝以下的微軟研究院技術專家對本文的審閱:DanLiebling 和羅賓雷諾-Haertle
羅賓 · 雷諾 Haertle 寫文檔與Visual Studio的跨平臺開發。她當前的興趣是.NET 核心、 C#、 Swift 和 R