Как получить все возможные матрицы (или data.frames), у которых столбец меньше исходной матрицы (или data.frame) - PullRequest
1 голос
/ 14 марта 2011

Как получить все возможные матрицы (или data.frames), у которых столбец меньше исходной матрицы (или data.frame)

Например, допустим, у меня есть матрица (или данные).frame) tmp

structure(list(V1 = 1:5, V2 = 6:10, V3 = 11:15, V4 = 16:20, V5 = 21:25), 
.Names =  c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, -5L), 
class = "data.frame")

Как эффективно получить: tmp [, - 1], tmp [, -2], tmp [, -3], tmp [, -4] и tmp[, -5]

В настоящий момент я могу думать о:

 llply(list(1,2,3,4,5), function(x) {tmp[[x]] <- NULL; tmp})

Это также можно сделать с помощью lapply.Есть ли лучший или более интуитивный и эффективный способ сделать это, особенно когда tmp является матричным (без выполнения as.data.frame(tmp))?

Заранее благодарим вас за любую помощь или указатели.

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

Почему бы не просто

lapply(1:ncol(tmp),function(i)tmp[,-i])

Работает как для матриц, так и для фреймов данных.

Не могу понять, как вы можете сделать это более интуитивно, чем это.

3 голосов
/ 14 марта 2011

Вы можете сделать это с помощью lapply с помощью простой индексации:

R> tmp <- matrix(1:10000,nrow=100,ncol=100)
R> lapply(1:ncol(tmp), function(i) {tmp[,-i]})

Возможно, есть более эффективное решение, но я думаю, что основная проблема этого метода заключается в том, что если ваша исходная матрица имеетбольшое количество столбцов (скажем, n ), результат функции lapply будет огромным (так как это будет список n-1 матриц), и вы можете исчерпатьпамять, чтобы справиться с этим.

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