Всякий раз, когда я хочу сделать что-то "map" py в R, я обычно пытаюсь использовать функцию в семействе apply
.
Однако я никогда не понимал различий между ними: как { sapply
, lapply
и т.д.} применяют эту функцию к входному/сгруппированному входу, как будет выглядеть вывод, или даже то, что вход может быть - поэтому я часто просто просматриваю их все, пока не получу то, что хочу.
Может кто-нибудь объяснить, как использовать тот, когда?
Мое текущее (возможно неправильное/неполное) понимание...
-
sapply(vec, f)
: input - это вектор. output - вектор/матрица, где элементi
равенf(vec[i])
, давая вам матрицу, еслиf
имеет многоэлементный вывод -
lapply(vec, f)
: то же, что иsapply
, но вывод - это список? -
apply(matrix, 1/2, f)
: input - это матрица. output - это вектор, где элементi
равен f (строка/col я матрицы) -
tapply(vector, grouping, f)
: output - это матрица/массив, где элемент в матрице/массиве является значениемf
при группировкеg
вектора, аg
попадает в строку /col имена -
by(dataframe, grouping, f)
: пустьg
- группировка. применитеf
к каждому столбцу группы /dataframe. достаточно напечатать группировку и значениеf
в каждом столбце. -
aggregate(matrix, grouping, f)
: похоже наby
, но вместо того, чтобы печатать вывод, агрегат вставляет все в кадр данных.
Боковой вопрос: я до сих пор не узнал plyr или не изменил форму - plyr
или reshape
полностью заменить все это?