частичные суммы строк в многомерных массивах - PullRequest
2 голосов
/ 12 апреля 2011

У меня есть вопрос о том, как применять функции R к многомерным массивам.

Например, рассмотрим эту операцию, в которой я уменьшаю запись на сумму других записей.

ppl["2012",,,,,1] <- ppl["2012",,,,,1]
- ppl["2012",,,,,2] - ppl["2012",,,,,3] - ppl["2012",,,,,4]
- ppl["2012",,,,,5] - ppl["2012",,,,,6] - ppl["2012",,,,,7]
- ppl["2012",,,,,8]

Хотя в этом случае возможно вычитание отдельных значений, я бы предпочел векторно-ориентированный подход.

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

sum(ppl["2012",,,,,2:8]) не является правильным решением, так как sum() всегда возвращает скаляры.

Я мог бы использовать циклы, которые выполняют необходимые операции, но это противоречит парадигме векторно-ориентированного программирования.

Спасибо за вашу помощь!

Редактировать: И вот решение исходной проблемы, основанное на предложении Андри: ppl[paste(i),land,,,,1] <- ppl[paste(i),land,,,,1] - apply(ppl[paste(i),land,,,,2:8],c(1,2,3),sum)

1 Ответ

4 голосов
/ 12 апреля 2011

EDITED

Вот пример использования apply и sum для возврата суммы, вычисленной по многомерной таблице:

mat <- array(1:27, dim=c(3, 3, 3))

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

Тогда код для этого становится:

apply(mat, c(1,2), sum)

     [,1] [,2] [,3]
[1,]   30   39   48
[2,]   33   42   51
[3,]   36   45   54
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...