【发布时间】:2009-11-25 18:15:36
【问题描述】:
F# 的一项声明是它允许交互式脚本和数据操作/探索。我一直在玩 F#,试图了解它如何与 Matlab 和 R 进行数据分析工作的比较。显然 F# 不具备这些生态系统的所有实用功能,但我更感兴趣的是底层语言的一般优点/缺点。
对我来说,最大的变化,即使是函数式风格,也是 F# 是静态类型的。这有一些吸引力,但也经常感觉像一件直筒夹克。例如,我还没有找到一种方便的方法来处理异构矩形数据——想想 R 中的数据框。假设我正在读取一个包含名称(字符串)和权重(浮点数)的 CSV 文件。通常我会加载数据、执行一些转换、添加变量等,然后运行分析。在 R 中,第一部分可能如下所示:
df <- read.csv('weights.csv')
df$logweight <- log(df$weight)
在 F# 中,不清楚我应该使用什么结构来执行此操作。据我所知,我有两个选择:1)我可以先定义一个强类型的类(Expert F# 9.10),或者 2)我可以使用异构容器,例如 ArrayList。静态类型的类似乎不可行,因为我需要在加载数据后以临时方式(对数权重)添加变量。异构容器也很不方便,因为每次访问变量时都需要将其拆箱。在 F# 中:
let df = readCsv("weights.csv")
df.["logweight"] = log(double df.["weight"])
如果这是一次或两次,那可能没问题,但是在我使用变量时每次指定一个类型似乎并不合理。我经常处理包含 100 个变量的调查,这些变量被添加/删除、拆分为新的子集并与其他数据框合并。
我错过了一些明显的第三选择吗?是否有一些有趣且轻松的方式来交互和操作异构数据?如果我需要在 .Net 上进行数据分析,我目前的感觉是我应该使用 IronPython 进行所有数据探索/转换/交互工作,并且只使用 F#/C# 进行数值密集型部分。 F# 天生就不是用于快速和肮脏的异构数据工作的错误工具吗?
【问题讨论】:
-
很好,明确的问题。我期待着答案。