воспроизвести вызов функции R с текстом - PullRequest
1 голос
/ 08 мая 2020

в приложении я использую RODBC для доступа к базе данных. В частности, я вызываю такую ​​функцию: sqlQuery(conn, qry), где qry - строка, а conn - объект подключения RODBC.

Можно ли вставить это в файл таким образом, что если я скопирую и вставлю содержимое файла в терминал, я воспроизведу точный вызов функции?

Например, если я создаю фрейм данных: df <- data.frame(test = c(1, 2, 3)), я могу вызвать dput(df), который вернет: structure(list(frank = c(1, 2, 3)), class = "data.frame", row.names = c(NA, -3L))

Если я скопирую и вставлю его в терминал, я получит исходный фрейм данных.

Было бы очень удобно для отладки, если бы я мог сделать что-то подобное для sqlQuery(conn, qry)

1 Ответ

0 голосов
/ 10 мая 2020

Предполагая, что dput работает нормально для ваших объектов, и что мы можем предположить, что все необходимые библиотеки загружены и / или определены функции, почему бы просто не создать строку вызова функции следующим образом:

Define ' fput 'для генерации вставляемой строки, которая будет реплицировать вызов функции:

fput = function( fun_string, ... ) {
    args=as.list(match.call(expand.dots=F))[["..."]]
    arg_strings=lapply(args,function(arg) capture.output(do.call(dput,list(arg),envir=parent.frame())))
    arg_string=paste(arg_strings,collapse=",")
    paste(fun_string,"(",arg_string,")")
}

Пример:

Пример данных:

a=1:10
b=a^2

Пример вызова функции для репликации как пастообразной строка:

plot(a,b)

Вызов fput ():

fput( "plot", a, b )

Вывод:

[1] "plot ( 1:10,c(1, 4, 9, 16, 25, 36, 49, 64, 81, 100) )"

Проверка: копирование-вставка вывода генерирует тот же результат, что и plot (a , б)

...