2013-04-15 4 views
1

Предположим, что набор данных incanter, freqs, из k столбцов целых чисел. Я хочу, чтобы преобразовать 2 столбца в значения от 0 до 1, разделив каждое значение столбца на фиксированное значение, скажем 20. Я могу сделать это, используя функцию $ map для 1 колонки: ($ map (fn [x] (/ x 20)): fq1 freqs). Документация о нагноировании на карте $, по-видимому, предполагает, что можно использовать вектор столбцов: «... отображение данной функции над значением (значениями) для данного столбца (ов) ...». Однако мои попытки сделать это ($ map (fn [x] (/ x 20)) [: fq1: fq2] freqs) дает «неправильное количество аргументов». Я понимаю эту ошибку. Надеюсь, кто-то может точно сказать, можно ли использовать вектор ключей столбца с помощью $ map; если да, то примером будет большая помощь.

ответ

1

Ведуна док для $map показывает, что вы можете передать вектор столбца $ карты и, следовательно, ваш код становится:

($map (fn [f1 f2] (do-something-with f1 f2) [:fq1 :fq2] freqs) 

Примечания: Как вы отображение более 2 столбцов, функция должна принимать 2 Params, также неправильное количество параметров не связано с тем, как вы назвали $ map, но ваша переданная функция принимает только один параметр.

+0

Благодарим вас за ответ. Я должен объяснить свою дилемму лучше. Используя пример 2 arg, я бы попробовал что-то вроде этого: (fn [f1 f2] (do (/ f1 20) (/ f2 20))) [: fq1: fq2] freqs, который возвращает только измененное: fq2. Моя проблема более общая в том, что мне также нужно сделать/возможно, 2, 3, 4 или более столбцов в зависимости от количества столбцов данных. – Brian

+0

Вы можете вернуть вектор из функции .. (fn [f1 f2] [(/ f1 20) (/ f2 20)]) – Ankur

+0

Спасибо за это разъяснение моему синтаксису; очень признателен. Надеюсь, документация об исправлении ошибок на протяжении многих лет улучшается. – Brian