limer is an R package that enable R users to connect directly to a Lime Survey installation via its API (for details, see earlier post), essentially giving you remote control and a possibility of automating certain procedures.
Because the documentation of limer and the Lime Survey API is a bit minimal and therefore quite confusing for a first-time user, I give some simple coding examples below to get you started.
First, we connect to our Lime Survey instance, which is installed at LIMESURVEY.URL
and can be accessed with a LIME.USERNAME
and LIME.PASSWORD
. Obviously you should replace these with your own installations’ details in the code below. The get_session_key()
command gets you a unique key through which you can securely access the Lime Survey installation. This is automatically used in all the limer
calls.
library(limer)
#LimeSurvey Server Info
options(lime_api = 'https://LIMESURVEY.URL/index.php/admin/remotecontrol')
options(lime_username = 'LIME.USERNAME')
options(lime_password = 'LIME.PASSWORD')
get_session_key()
The first example is a simple one that uses a built-in function from limer, get_responses
. This simply allows you to download all the data (or only completed data) from a particular survey, #10001 in this case.
responses <- get_responses(10001, sCompletionStatus = 'all')
The second example requires greater knowledge of the LimeSurvey API language because the limer package does not have a neat wrapper for these functions. Instead the generic call_limer
function is used in which calls from the original API can be introduced. The full guide of these API functions is available here.
The example below involves listing all the surveys on the Lime Survey installation (server) and then getting the number of completed responses. Note that the method
inserted into the call_limer()
function is the same method that is listed in the API documentation and the params
are the arguments of that respective method. So in this sense, it’s actually quite straight forward
call_limer(method = "list_surveys") #list surveys on server
call_limer(method = "get_summary", #get number of completed responses
params = list(iSurveyID = 10001,
sStatname = "completed_responses"))
The third and last example showcases some of the more sophisticated automation options. We aim to copy survey 123456
, setup a participant table with two extra attributes: Institution
and File
, add one participant, activate the survey, compose the survey link and then, delete the survey.
When the initial survey is copied and users are created, details are stored in tmp
and tmp2
because we wish to use these outputs and inputs for later functions.
The fromJSON
function (which is from the JSONlite
package) is also used to feed arrays with multiple pieces of data into the call_limer
function. There might also be other ways to do this, but the below example works.
tmp <- call_limer(method = "copy_survey", #copy a survey
params = list(iSurveyID_org = 123456,
sNewname = 'The Copied Survey'))
call_limer(method = "activate_tokens", #setup participant table
params = list(iSurveyID = tmp$newsid,
aAttributeFields = fromJSON('{"attribute_1":"Institution","attribute_2":"File"}')))
tmp2 <- call_limer(method = "add_participants", #add participant
params = list(iSurveyID = tmp$newsid,
aParticipantsData = fromJSON('[{"email":"bond007@secretservice.gov.uk","lastname":"Bond","firstname":"James","attribute_1":"Secret Service","attribute_2":"mi5","usesleft":999999}]'),
bCreateToken = TRUE))
call_limer(method = "activate_survey", #activate survey
params = list(iSurveyID = tmp$newsid))
paste0('https://LIMESURVEY.URL/index.php/', tmp$newsid, '?token=', tmp2$token, '&newtest=Y') #generate survey link
call_limer(method = "delete_survey", #delete the survey
params = list(iSurveyID = tmp$newsid))
As is hopefully clear now, the limer
package offers some powerful options for automating the setting up of surveys as well as importing the data into R.
Finally, its good practice to close off the session with the following call.
release_session_key()