前一個問題(Working with heterogenous data in a statically typed language),我問了一下F#如何處理數據分析標準的任務,如操縱非類型化的CSV文件。動態語言擅長於基本任務,如F#類型提供程序和數據處理
data = load('income.csv')
data.log_income = log(income)
在F#中,最優雅的方法似乎是問號(?)運算符。不幸的是,在這個過程中,我們失去了靜態類型,並且仍然需要類型註釋。
一個F#中最令人興奮的未來功能是Type Providers。以最小的類型安全性損失,CSV類型提供者可以通過動態檢查文件來提供類型。
但數據分析通常不會停在那裏。我們經常通過一系列的操作來轉換數據並創建新的數據集。我的問題是,如果我們主要操縱數據,類型提供程序可以提供幫助嗎?例如:
open CSV // Type provider
let data = CSV(file='income.csv') // Type provider magic (syntax?)
let log_income = log(data.income) // works!
這可行,但會污染全局命名空間。考慮添加一列通常更自然,而不是創建一個新變量。有什麼方法可以做?
let data.logIncome = log(data.income) // won't work, sadly.
進行類型供應商提供使用時,我們的目標是創造新的衍生物或清理後的數據集(?)運算符逃生?
也許是這樣的:
let newdata = colBind data {logIncome = log(data.income)} // ugly, does it work?
其他的想法?