У меня есть вопрос о том, как применять функции 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)