У меня есть матрица, которую я хочу поместить в функцию применения и использовать местоположение и значение каждого объекта в матрице для выбора и обновления позиций в 3-мерном массиве.Я могу сделать это очень легко в цикле for, но мне любопытно, возможно ли это сделать в функции применения.Кажется, у меня проблемы с тем, чтобы обернуть голову вокруг этого.У меня есть некоторые вещи, которые работают, но не в идеале.
foo <- matrix(c(3, NA, NA, 1, NA, 3, NA, 2, NA),
3, 3, byrow = TRUE)
bar <- array(NA, c(3, 3, 3))
Это цикл for, который делает именно то, что я ищу
for (i in 1:3){
for (j in 1:3){
if (!is.na(foo[i, j])){
bar[i, j, foo[i, j]] <- TRUE
}
}
}
Это лучшее, что я получил до сих пор.Он обновляет массив, но выводит список назначений, выполненных на каждой итерации.Также, если это возможно сделать без оператора <<-
, это было бы идеально.
fillArray <- function(x) {
if (!is.na(foo[x[1], x[2]])) {
bar[x[1], x[2], foo[x[1], x[2]]] <<- TRUE
}
}
apply(expand.grid(1:3, 1:3), 1, fillArray)
Я хотел бы получить тот же результат, что и цикл for.