У меня есть матрица, которую нужно заполнить значениями. Первая строка матрицы будет иметь такое же значение, а последующие значения строки будут сгенерированы с использованием функции, основанной на значении первой строки
. Я могу сделать это с помощью вложенных значений для 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