R: построить фрейм данных в пользовательской функции - PullRequest
2 голосов
/ 05 июля 2011

Я столкнулся с проблемой при определении функции в R. Я пытаюсь преобразовать содержимое цикла for в функцию, чтобы я мог lapply функцию в список, (и в свою очередь mclapply с использованием пакета multicore)

Мне нужно построчно строить фрейм данных, получая по одному тексту и одному числовому значению за раз из функции. Из предыдущего поста я понимаю, что я должен как-то возвращать значения из-за схемы передачи и копирования R, а не схемы передачи по ссылке (см .: Как добавить столбец во фрейме данных в функции

Вот упрощенная версия того, что я делаю:

letters <- c('aa', 'bb', 'cc', 'aa', 'bb', 'dd', 'cc', 'dd', 'ee', 'ee')
numbers <- 1:10
madeup <- data.frame(letters, numbers)
output <- data.frame()

functest <- function(x) {
    subtest <- subset(madeup, letters==x)
    if (nrow(subtest==2)){
        calc <- subtest$numbers[2] - subtest$numbers[1]
        ...WHAT GOES HERE?...
    }
}

Кто-нибудь знает, что я должен сделать, чтобы вернуть x и calc, чтобы я мог rbind каждое из этих двух значений в новую строку output фрейма данных?

Если я смогу скопировать эти два значения из функции, я представляю, что команда выполнения будет выглядеть примерно так: *

output <- rbind(output, [mc]lapply(letters, functest))

--- но я рад, что поправился!

1 Ответ

2 голосов
/ 05 июля 2011

rbind ing data.frames очень медленно в моем опыте, но в любом случае: замените заполнитель на return(data.frame(x,calc)).

После изменения функции, возможно, самый простой способ собрать их всех в один data.fame - это:

output<-do.call(rbind, lapply(letters, functest))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...