Я обнаружил удивительное поведение apply
, что я задаюсь вопросом, может ли кто-нибудь объяснить. Давайте возьмем простую матрицу:Неожиданное поведение функции применения в R
> (m = matrix(1:8,ncol=4))
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
Мы можем перевернуть его вертикально, таким образом:
> apply(m, MARGIN=2, rev)
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 1 3 5 7
Это применяет функцию rev()
вектор разворота итеративно для каждого столбца. Но когда мы пытаемся применить обороты по строке, мы получаем:
> apply(m, MARGIN=1, rev)
[,1] [,2]
[1,] 7 8
[2,] 5 6
[3,] 3 4
[4,] 1 2
.. 90 градусов против часовой стрелки вращения! Применить тот же результат, используя FUN=function(v) {v[length(v):1]}
, так что это определенно не ошибка вина.
Любые объяснения для этого?
Спасибо за объяснение как механики, так и причины. Если последующий консенсус не идет на ответ Мэтью (казалось бы, одинаково правильный), я думаю, что вы прибили его. – geotheory
Спасибо за комментарий, оцените его. – tonytonov