2016-02-23 8 views
2

Я только начинают открывать для себя все преимущества использования R & monetDB/monetDBLite пакет - большой материал!
мне было любопытно, однако, если это возможно, чтобы использовать определенную функцию настраиваемого в dplyr «s mutate() т.е.Использование пользовательской функции в мутируют() с dplyr & monetDB

# Connect to monetDBLite 
db <- src_monetdb(embedded = db.dir) 
data <- tbl(db, "my.table") 

# Try to make a new column using custom defined function 
data %>% group_by(colX) %>% mutate(NewCol = customFunc()) 

Результаты в следующей ошибки:

Error in .local(conn, statement, ...) : 
Unable to execute statement 'SELECT colA colB colC...'. 
Server says 'ParseException:SQLparser:SELECT: no such operator 'customFunc''. 

Похоже, что SQL парсер имеет проблему поиск пользовательской функции. Я что-то наблюдаю (объявляю код R в определении функции SQL и т. Д.)? Возможно ли использовать определенные пользователем функции с пакетом monetDBLite?

+0

Как определяется 'customFunc'? Как правило, вам необходимо передать сводные функции аргументу, то есть столбцу, для которого нужно работать. – alistaire

+2

Это еще не поддерживается. Бросить в 'collect()' между ними возможно? Передачи должны быть довольно быстрыми, особенно если вы выберете() 'только те столбцы, которые вам нужны раньше. –

+0

@ HannesMühleisen да, это работает очень хорошо. Какие-нибудь планы по реализации этого в будущем? Кроме того, имеет ли значение, что я использую пакет «monetDBLite» - возможно ли это с помощью «реальной» настройки «monetDB»? Благодарю вас и соблюдайте отличную работу! – davidski

ответ

0

С @Hannes ответил на мой вопрос в комментариях - я добавляю его здесь с некоторыми другими вещами я взял:

  • можно использовать основные dplyr глаголы (select, filter, group_by & mutate) в сочетании с некоторыми другими «базовыми» функциями R. Существует список поддерживаемых функций и многое другое об этом, в разделе dplyrdatabases vignette в разделе «Перевод SQL». Итак, используя пример из моего вопроса выше, можно сделать:
    data %>% group_by(col_x) %>% mutate(new_col = log10(some_old_col)).

  • MonetDBLite не поддерживает пользовательские функции (например, мой вопроса здесь - если это возможно, чтобы использовать мой UDF внутри mutate вызова) ...

  • ... однако «полный» MonetDB делает носитель, используемым определенные функции для отправки в db для вычисления. Все это хорошо объяснено на их homepage.

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

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