Создание отдельного data.frame с функцией cbind и loop - PullRequest
1 голос
/ 08 июля 2019

Я генерирую несколько данных с помощью функции cbind и loop.

Давайте предположим, что у меня есть два data.frame.Каждый data.frame имеет значение 100 * 10.

first<-data.frame(replicate(10,sample(0:1,100,rep=TRUE)))
second<-data.frame(replicate(10,sample(2:10,100,rep=TRUE)))

Каждый столбец second data.frame связан с first data.frame, генерируя десять 100 * 11 data.frame (первый + один)столбец second data.frame).

Итак, я создал функцию цикла следующим образом.

for (i in 1:10){
cbind(first,second[,i])}

Эта функция имеет две проблемы.

Первая.после запуска ничего не произошло.Только этот синтаксис появился в окне консоли.

> for (i in 1:10){
+ ti<-cbind(first,second[,i])}

Во-вторых, я хочу сохранить результат в каждом отдельном объекте, например t1, t2, t3, ...., t10.Итак, я запустил этот код.

for (i in 1:10){
ti<-cbind(first,second[,i])}

Однако, как вы можете подумать, он несколько раз сохраняет результаты в объектах 'ti'.Итак, объект ti - это first фрейм данных + 10-й столбец second data.frame.

Как создать 10 различных объектов, например t1, t2, t3,t4 ..., t10?

* Дополнительный вопрос: На самом деле, second data.frame в реальной работе - это более 100 столбцов.Итак, произведенными объектами являются t1, t2, .... t100, .... и продолжение.Есть ли способ сохранить организованные объекты?

* Дополнительный вопрос к ответу Акруна

Действительно, благодаря вашей помощи.Сработало!

Однако появилась новая проблема.То, что я хочу сделать с результатами, было немного сложнее.

Давайте рассмотрим пример с t1 obejct в списке lst1.Требуется два шага.

Я хочу изгнать функцию data.matrix с помощью объекта t1 и поместить результат data.matrix в функцию predict.(Из-за функциональной причины, исходная функция predict способна вычислять только data.matrix)

Если бы это было data.frame, я бы запустил

data.matrix(t1) predict(orginalfunction,newx=t1,matrix=TRUE)

Однако, прочитав ваш ответ, я считаю правильным использовать lapply со списком.data.frame слишком грязный.

Но как я могу применить функцию data.matrix к каждому объекту списка и поместить ее в функцию predict?

1 Ответ

1 голос
/ 08 июля 2019

Опция lapply.Прокрутите столбцы 'second' и cbind, чтобы создать новый столбец в 'first', установите имена list с выбранными именами.Как упомянул @thelatemail (и полностью с этим согласен), лучше не создавать объекты в глобальном окружении, а хранить, хранить, обрабатывать и записывать из самого list, используя такие инструменты, как lapply/sapply/vapply

lst1 <- lapply(second, function(x) cbind(first, newcol = x))
names(lst1) <- paste0("t", seq_along(lst1))

Поскольку это list, мы можем использовать lapply для просмотра списка

lapply(lst1, function(x) predict(originalfunction, newx = x, matrix = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...