Создать список аргументов, используя lapply для do.call - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь передать набор измененных аргументов из более крупной функции в аргументы во вложенной функции.Это аргумент, предоставленный большей функцией:

time_dep_covariates_list = c(therapy_start = "Start of Therapy",
                             therapy_end = "End of Therapy")

У меня есть следующие наборы постоянных аргументов:

    tmerge_args_1 <- alist(data1 = analytic_dataset, 
                     data2 = analytic_dataset, 
                     id = patientid, 
                     tstop = adv_dx_to_event, 
                     death_censor = event(adv_dx_to_event))

И я хочу добавить эти измененные аргументы в этот список аргументов:

   tmerge_args_2 <- lapply(1:length(time_dep_covariates_list), function(x){
            tmerge_args <<- c(tmerge_args, alist('var' = tdc(var)) )
            paste0(names(time_dep_covariates_list[x])," = 
            tdc(",names(time_dep_covariates_list[x]), ")")
            })
 > tdc_args
 [[1]]
 [1] "therapy_start = tdc(therapy_start)"

 [[2]]
 [1] "therapy_end = tdc(therapy_end)"

Я хочу создать do.call, который обрабатывает аргументы следующим образом:

count_process_form <- do.call(tmerge, args = c(tmerge_args_1,
                                              tmerge_args_2)

Это будет идентично следующему:

tmerge(data1 = analytic_dataset, data2 = analytic_dataset,
       id = patientid, tstop = adv_dx_to_event, 
       therapy_start = tdc(therapy_start), therapy_end = tdc(therapy_end)

ЭтоСам по себе прекрасно работает с tmerge_args_1, но так как args_2 являются символьными, а не языковыми элементами, я получаю эту ошибку:

Error in (function (data1, data2, id, ..., tstart, tstop, options)  : 
all additional argments [sic] must have a name:

Как я могу изменить список, который я создаю для args_2, чтобы они сохранялись какаргументы, которые do.call может понять?Или я все это неправильно подхожу?

Спасибо!

Вот воспроизводимый пример:

analytic_dataset= data_frame(patientid = sample(1:1000,5),
                         adv_dx_to_event = sample(100:200, 5),
                         death_censor = sample(0:1,5, replace = T),
                         therapy_start = sample(1:20,5),
                         therapy_stop = sample(40:100,5))

Нижеследующее будет передано из функции:

time_dep_covariates_list = c(therapy_start = "Start of Therapy",
                         therapy_end = "End of Therapy")

tmerge_args_1 <- alist(data1 = analytic_dataset, 
                   data2 = analytic_dataset, 
                   id = patientid, 
                   tstop = adv_dx_to_event, 
                   death_censor = event(adv_dx_to_event))
do.call(tmerge,tmerge_args_1) #this works 

tmerge_args_2 <- lapply(1:length(time_dep_covariates_list), function(x){
 tmerge_args <<- c(tmerge_args, alist('var' = tdc(var)) )
  paste0(names(time_dep_covariates_list[x])," = tdc(",names(time_dep_covariates_list[x]), ")")
})

do.call(tmerge,tmerge_args_1,tmerge_args_2) # this doesn't```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...