Моя функция выводит "Seq", а не строку в F #? - PullRequest
0 голосов
/ 11 июня 2018

Мне любопытно, почему, когда я запускаю это, функция "parsenumber" выводится как Seq, а не просто как int.

|> Seq.map (fun ((number,income,sex,house),data) -> 
    let parsenumber = number |> Seq.skip 9 |> Seq.take 5
    let numberofpets = data |> Seq.map (fun row -> (1.0 - float row.pets))
    ((parsenumber,income,sex,house),numberofpets)

Это результат:

(<seq>, "30050", "Male", "Yes")
(<seq>, "78000", "Female", "No")

Как я могу изменить это, чтобы он выводил число, а не <seq>.

С помощью Seq.skip и Seq.take я пытаюсь пропустить первые 9 целых чисел каждого наблюдения по числу и вернуть последнее5.

RAW CSV DATA:

10000000001452,30050,Male,Yes
10000000001455,78000,Female,No

Что я хочу получить в результате:

('01452','30050','Male','Yes')
('01455','78000','Female','No')

Что я на самом деле получаю:

(<seq>, "30050", "Male", "Yes")
(<seq>, "78000", "Female", "No")

Мне нужно иметь не вывод, а фактическое число.

1 Ответ

0 голосов
/ 11 июня 2018

Когда вы говорите: «Я пытаюсь пропустить первые 9 целых чисел каждого наблюдения по числу и вернуть последние 5», вы имели в виду «цифры», а не «целые числа»?Т.е. изначально number строка?Тогда вы должны использовать number.Substring(9, 5) вместо Seq.skip и Seq.take.Функции Seq.skip и Seq.take определены как возвращаемые последовательности - для этого они и нужны.Когда вы интерпретируете строку как последовательность, она возвращает последовательность символов.Если вы используете метод .Substring, он возвращает строку.

Кстати, если вы хотите использовать .Substring, вам нужно будет указать F #, какой тип вы ожидаете number: вызов методовпараметра - это то место, где вывод типа F # не может определить, какой у вас тип.(Потому что теоретически вы могли бы определить свой собственный тип с помощью метода .Substring и намереваться вызвать этот тип).Чтобы явно объявить тип параметра number, вы должны использовать двоеточие и имя типа, так что fun ((number,income,sex,house),data) -> станет fun ((number : string, income, sex, house), data) ->.Таким образом, все ваше выражение Seq.map станет:

|> Seq.map (fun ((number : string, income, sex, house), data) -> 
    let parsenumber = number.Substring(9, 5)
    let numberofpets = data |> Seq.map (fun row -> (1.0 - float row.pets))
    ((parsenumber, income, sex, house), numberofpets)

Кроме того, parsenumber не является функцией, так что это неправильное название для нее.Возможно, parsednumber было бы лучше, хотя, если бы я понял больше о том, что вы пытаетесь сделать, то, вероятно, есть даже лучшее предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...