使用lapply为do.call创建参数列表

时间:2018-06-03 21:29:57

标签: r

我试图将一个更大的函数中的一组修改参数传递给嵌套函数中的参数。这是一个由较大函数提供的参数:

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```

0 个答案:

没有答案