2014-09-16 2 views
1
require(RCurl) 
RAW.API <- postForm(REDcap.URL, token=Redcap.token, content="record", 
     type="flat", format="csv", rawOrLabel="Label", 
     .opts=curlOptions(ssl.verifypeer=TRUE, cainfo=REDCap.crt, 
     verbose=FALSE)) 

data <- read.table(file = textConnection(RAW.API), header = TRUE, 
      sep = ",", na.strings = "", stringsAsFactors = FALSE) 

Am используя такой код для извлечения данных из носильщик в проблему R.The является при работе с большим набором данных для моего случая> 19000 записывает ее, отнимающих много времени, даже прерывании на раз. Есть ли способ улучшить код выше или может быть подмножество данных с датой.RCurl postform с очень долгое время с большими наборами данных

+1

Ваш пример кода недостаточен в качестве примера [воспроизводимого] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), поскольку важные переменные отсутствуют для нас чтобы иметь возможность запускать один и тот же код. Мне непонятно, говоришь ли ты, что проблема связана с загрузкой http или просто созданием data.frame. Фильтрация в R не может быть выполнена до чтения в данных; если вы хотите уменьшить количество возвращенных записей, посмотрите, есть ли в вашем API Redcap параметры фильтрации. Мы не можем помочь вам без воспроизводимого примера. – MrFlick

+1

Взаимодействие с REDCap в этих слайдах довольно сложно: https://github.com/sburns/advanced-redcap-interfaces/blob/master/slides.md) Вы пытались переключиться на 'httr' и используя опцию 'verbose()'? Поскольку это слой поверх «RCURL», он принимает все необходимые параметры и может быть легче отлаживать. Кроме того, вы пробовали один и тот же 'postForm' из командной строки' curl'? (примеры для этого находятся на этой странице слайдов) – hrbrmstr

+1

Существует также пакет [redcapAPI] (http://cran.r-project.org/web/packages/redcapAPI/), который может полностью решить все ваши проблемы. – Thomas

ответ

2

Рассмотрите возможность использования одного из существующих пакетов R для обработки некоторых низкоуровневых кода. Оба REDCapR и redcapAPI возвращают данные как data.frame. Они были разработаны двумя независимыми командами, но мы вносим вклад в пакеты друг друга и часто общаемся.

Что касается вашей конкретной ситуации, я подозреваю, что пакетная обработка пакетов поможет вам. Под обложками оба пакета извлекают подмножества данных, а затем присоединяют их вместе, прежде чем возвращать унифицированный data.frame. В настоящее время дозирование не ускоряет общую работу, но в основном помогает избежать тайм-аутов

Для общей рекомендации REDCapR имеет некоторые виньетки на CRAN, а у redcapAPI есть wiki.

Есть ли что-нибудь еще, что должно быть добавлено, @Benjamin?

+1

Я думаю, что @wibeasley, вероятно, правильно определил вашу проблему. Это проблема, которую я видел для любого языка, обращающегося к API. REDCapR, вероятно, обрабатывает это немного лучше, чем redcapAPI, но я использовал redcapAPI для импорта набора данных размером до 37 000 предметов. – Benjamin

+1

Вы также можете попробовать экспортировать отчет. В отчете будет выполнен запрос, который может ограничить данные достаточно небольшим набором, который вы можете завершить экспорт, но вы по-прежнему будете подвергать себя такому же риску таймаута. Для этого вам нужно использовать REDCap версии 6.0 или выше. – Benjamin

 Смежные вопросы

  • Нет связанных вопросов^_^