前一个问题(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?
其他的想法?