Одна из претензий F # заключается в том, что она позволяет создавать интерактивные скрипты и манипулировать данными/исследования. Я играл с F #, пытаясь понять, как он сравнивается с Matlab и R для работы анализа данных. Очевидно, что F # не обладает всей практической функциональностью этих экосистем, но меня больше интересуют общие преимущества/недостатки базового языка.
Для меня самое большое изменение, даже над функциональным стилем, заключается в том, что F # статически типизирован. У этого есть некоторое обращение, но также часто чувствует себя как смирительная рубашка. Например, я не нашел удобного способа работы с разнородными прямоугольными данными - думаю, данные в рамке в R. Предположим, что я читаю CSV файл с именами (строками) и весами (float). Обычно я загружаю данные, выполняю некоторые преобразования, добавляю переменные и т.д., А затем запускаю анализ. В R первая часть может выглядеть так:
df <- read.csv('weights.csv')
df$logweight <- log(df$weight)
В F # не понятно, какую структуру я должен использовать для этого. Насколько я могу судить, у меня есть два варианта: 1) Я могу определить класс, который строго типизирован (Expert F # 9.10) или 2) Я могу использовать гетерогенный контейнер, такой как ArrayList. Статически типизированный класс не представляется возможным, потому что после загрузки данных мне нужно добавить переменные ad hoc (logweight). Неоднородный контейнер также неудобен, потому что каждый раз, когда я обращаюсь к переменной, мне нужно будет ее удалить. В F #:
let df = readCsv("weights.csv")
df.["logweight"] = log(double df.["weight"])
Если это было один или два раза, это может быть хорошо, но указание типа каждый раз, когда я использую переменную, не кажется разумным. Я часто занимаюсь опросами с 100 с переменными, которые добавляются/удаляются, разбиваются на новые подмножества и сливаются с другими файлами данных.
Я пропустил какой-то очевидный третий выбор? Есть ли какой-нибудь интересный и легкий способ взаимодействия и манипулирования разнородными данными? Если мне нужно провести анализ данных на .Net, то мой нынешний смысл в том, что я должен использовать IronPython для всех работ по исследованию/преобразованию данных/взаимодействию данных и использовать только F #/С# для численно-интенсивных деталей. Является ли F # неотвратимым инструментом для быстрой и грязной гетерогенной работы?