Заполните матрицу, используя R * применить функции - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть матрица, которую нужно заполнить значениями. Первая строка матрицы будет иметь такое же значение, а последующие значения строки будут сгенерированы с использованием функции, основанной на значении первой строки

. Я могу сделать это с помощью вложенных значений для l oop, например, так. Внешний l oop проходит по столбцу, устанавливает значение в первой строке в этом столбце. Затем внутренняя l oop заполняет остальные строки в этом столбце, используя fn. Сама функция принимает в качестве входных данных предыдущее значение строки.

fn <- function(value){ value + 1 }
myMatrix <- matrix(NA,5,3)
value <- 100

for(col in 1:ncol(myMatrix)){
    myMatrix[1,col]<-value #First row value for all the columns should be the same
    for(row in 2:nrow(myMatrix)){
        #Rest of the row values generated using fn
        myMatrix[row,col] <- fn(myMatrix[row-1,col])
    }
}

myMatrix

Я не хочу использовать a для l oop и хотел бы специально добиться этого, используя одну из векторизованных * apply функций R. Я пробовал это, но это не работает.

fn <- function(value){ value + 1 }
myMatrix2 <- matrix(NA,5,3)
value <- 100

sapply(1:ncol(myMatrix2), function(col){
        myMatrix2[1,col]<-value
        sapply(2:nrow(myMatrix2),function(row){
            fn(myMatrix2[row-1,col])
            })
    })

РЕДАКТИРОВАТЬ:

Я смог добиться этого, используя sapply и оператор присваивания << - для заполнения матрица. Но есть ли более чистый / эффективный способ сделать это с помощью * apply family? </p>

fn <- function(value){ value + 1 }
myMatrix2 <- matrix(NA,5,3)
value <- 100

myMatrix2[1,]<-value #first row of the matrix to have the same value
sapply(1:ncol(myMatrix2), function(col){
    sapply(2:nrow(myMatrix2),function(row){
        myMatrix2[row,col] <<- fn(myMatrix2[row-1,col])
        })
    })

myMatrix2

...