Я писал заметки для сравнения apply() и sweep() и обнаружил следующие странные отличия. Чтобы сгенерировать тот же результат, sweep() требует MARGIN = 1, тогда как apply требует MARGIN = 2. Также аргумент, определяющий матрицу, имеет верхний регистр X в apply(), но строчный в sweep().apply() vs. sweep() в R
my.matrix <- matrix(seq(1,9,1), nrow=3)
row.sums <- rowSums(my.matrix)
apply.matrix <- apply(X = my.matrix, MARGIN = 2, FUN = function (x) x/row.sums)
sweep.matrix <- sweep(x = my.matrix, MARGIN = 1, STATS = rowSums(my.matrix), FUN="/")
apply.matrix - sweep.matrix ##yup same matrix
Не работает функция «наложения типа»? Является ли это еще одним R quirk или я потерял рассудок?
Каков ваш вопрос, то есть что непонятно после прочтения документации? – Roland
Вопрос: существуют ли две тесно связанные функции, действительно, имеют разный синтаксис для одной и той же проблемы? –
Обратите внимание, что R был разработан в течение длительного времени, и R-Core бережно относится к тому, чтобы не нарушить существующий код. Обе эти функции, вероятно, являются наследием S, и совместимость с S/S-PLUS была большой проблемой в первые дни. – Roland