RCaller教程:在FME中R的輸入和輸出

RCaller教程:在FME中R的輸入和輸出

介紹

如果你需要執行比StatisticsCalculator更高級的統計功能,則可以使用轉換器Rcaller實現更高級的統計分析。Rcaller讓你能夠在FME中執行R script。

下載

5914-rcallerlinearregression.fmwt

5910-rcallerlinearregressionwithgroups.fmwt

入門

    在使用RCaller之前,你需要安裝合適的R軟件包。請參閱FME用戶文檔中有關安裝R解釋器的章節。

在開始使用RCaller之前,記住兩件事:

  1. R不喜歡UNC路徑名,因此,不能運行存儲在UNC路徑上的FME工作空間。即:\\myprojects\fmeWorkspaces.你必須在映射的驅動器上運行FME工作空間,即:f:\myprojects\fmeWorkspaces.
  2. 如果你不熟悉這些概念,請閱讀R的一些內容。這裏提供一個教程

源數據

將轉換器或要素類連接到RCaller的輸入端口時,FME會向RCaller添加新的端口。這個新的輸入端口會繼承源對象的名稱(即變量名或要素類名)。

端口名稱用作R中的data frame的名稱,因此可以將端口名稱命名爲你可以在R腳本中使用的名稱。

FME將數據加載到臨時的SQLite數據庫,因此,爲了提高性能和可讀性,只需選擇要在R腳本中使用的屬性。確保數據類型正確。

FME將放入R的數據看作data frame。可以通過拖動“Data Frames”裏列出的data frame來訪問數據:

比如,要訪問向量Estimated,只需要將Estimated拖動到腳本窗口中,你就會看到Date$Estimated.

創建R腳本

這不是R教程。如果你是R新手,我建議你使用R Console來開發和調試R腳本——你可以更容易的看到中間結果,也能得到更好的反饋。然後將腳本複製粘貼到RCaller中。在R Console中可以清楚發現問題所在,同時,可以使用R提供的模塊加載數據樣本。即:

注意:R使用UNIX路徑,即’/’而不是’\’。

輸出R結果

可能會很棘手!RCaller通過一個名爲“fmeOutput”的data frame將數據傳回給FME,data frame的每一行都將成爲FME中的一個單獨的要素輸出。如果你知道如何構建和添加data frame,你可以跳過本章節。

要填充fmeOutput的data frame,你可以簡單地傳回一列值(向量長度爲1)。即:

這會產生一個FME要素,該要素包含兩個平均值,其屬性名爲meanX和meanY。但是,大部分情況下,R函數返回的結果更復雜些。比如,解決y=mx+k這種問題的線性迴歸函數:

使用R函數summary()查看結果:

如何讓結果返回FME?

函數names()會返回summary裏面的變量名:

但是,其中的一些屬性本身就是更復雜的對象,比如coefficients:

如何將結果返回給FME,比如y=mx+k分析結果裏的r方,m和k?

你必須將你需要的值挑選出來並傳遞給fmeOutput. 在上面的例子中,m由Data$Estimate的Estimate = -0.009291111給出,k(y截距)由(Intercept)的Estimate = 12.051001492給出,r方直接由r.squared給出。所以,可以如此設置:

非常簡單!

工作空間5976-rcallerlinearregression.fmwt說明了上述示例。

最後一個提示:在RCaller中暴露結果變量,使工作空間的工作更輕鬆:

R結果導出到臨時文件

在某些情況下,可能不適合爲R結果使用data frame。比如對於大型柵格或影像數據。在這種情況下,你可以將你的R結果導出到臨時數據文件,並讓FME重新讀取這些結果。

循環分組

對於某個統計問題,比如你有一個定性屬性Code,其值爲ABC ABD和TXU。它與定量值有一定的關係,這樣分組就變得有意義。

例如,你可能需要計算每個Code的平均值:

你可以將分析放入循環中,通過Code對數據進行採樣,然後計算迴歸。過程如下:

但是你不能只使用

r2 <- summary(lm)$r.squared

返回結果,因爲這樣你只是返回了最近的r2,而不是計算出來的三個值。

一個可行的解決方法是,爲每個結果構建向量,然後將這些結果向量複製給fmeOutput

你還可以將結果直接分配給一個效率更高的data frame。

工作空間5910-rcallerlinearregressionwithgroups.fmwt演示了上述示例。

調試R腳本

如果你對R比較陌生,那麼我建議你現在R Console中開發腳本,然後再轉移到RCaller。如果你遇到RCaller錯誤:

ERROR |RCaller(InlineQueryFactory): InlineQueryFactory failed with exit code 1 when executing R script. Output was: Loading required package: gsubfn Loading required package: proto Loading required package: RSQLite

如果腳本中存在語法錯誤或未定義的變量引用,這似乎是常見的錯誤響應,因此請仔細檢查腳本中未分配的變量或拼寫錯誤。

記住,和FME一樣,R是區分大小寫的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章