При удалении столбца NA в матрице в списке удаляются имена столбцов матрицы - PullRequest
3 голосов
/ 25 сентября 2019

У меня есть код, который выглядит следующим образом:

mat1 <- matrix(1, nrow = 1, ncol = 2)
mat1[1,1] <- NA
colnames(mat1) <- c(NA, 'Name1')
mat2 <- mat1
mylist <- list(mat1, mat2)

mylist <-  lapply(mylist, function(x)  x[!is.na(colnames(x))])

Если я удаляю столбец с именем NA, имя столбца Name1 также удаляется из матрицы.Как я могу удалить столбец NA, но сохранить имена столбцов оставшихся столбцов матриц в списке?

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Мы можем использовать lapply с complete.cases в именах столбцов, чтобы вернуть логический вектор, и использовать этот индекс j для выбора столбцов матрицы

lapply(mylist, function(x) x[, complete.cases(colnames(x)), drop = FALSE])
 #[[1]]
 #     Name1
 #[1,]     1

 #[[2]]
 #    Name1
 #[1,]     1
1 голос
/ 25 сентября 2019

Использование:

lapply(mylist, function(x)  x[, !is.na(colnames(x)), drop = FALSE])

#   [[1]]
#     Name1
#[1,]     1

#[[2]]
#     Name1
#[1,]     1

Матрицы отличаются от кадров данных.В случае матрицы mat1[1] возвращает вам первое значение матрицы, тогда как в случае с информационными кадрами mtcars[1] возвращает первый столбец.Для подстановки столбцов в матрице вам всегда нужна предшествующая запятая (mat[, i], а не mat[i]), но это не всегда верно для фреймов данных.

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