Функция Lapply не работает для моих матриц - PullRequest
0 голосов
/ 14 ноября 2018

Проблема:

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

Пример:

x <- matrix(3,4,4)
y <- matrix(5,4,5)
z <- list(x,y)
NewZ <- lapply(1:2, function(i) z[[i]][-nrow(z[[i]]), ] <- 0)

Lapply возвращает мне это:

> NewZ
[[1]]
[1] 0

[[2]]
[1] 0

Я бы хотел получить такие матрицы:

> z[[1]][-nrow(z[[1]]),] <- 0
> z[[1]]
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
[3,]    0    0    0    0
[4,]    3    3    3    3
> z[[2]][-nrow(z[[2]]),] <- 0

> z[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    0    0    0    0    0
[4,]    5    5    5    5    5

Где моя ошибка? Любая идея, пожалуйста?

1 Ответ

0 голосов
/ 14 ноября 2018

Вы используете lapply() как петлю for.lapply проходит по списку самостоятельно, нет необходимости использовать индексирование:

NewZ <- lapply(z, function(x){
  x[-nrow(x),] <- 0
  return(x)
})

> NewZ
[[1]]
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
[3,]    0    0    0    0
[4,]    3    3    3    3

[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    0    0    0    0    0
[4,]    5    5    5    5    5

Кроме того, когда вы изменяете определенные части элемента списка с помощью lapply (что означает, что вы используете <-оператор внутри звонка), вам нужно return элемент.

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