用户定义函数eval()函数中的“找不到对象”错误?

时间:2014-03-24 18:12:14

标签: r

我试图为我需要多次执行的任务编写函数(在多个插补数据集上运行cox比例风险函数)。但是,当我将必要的对象传递给我的用户定义的函数时,它会给出一个错误,指出无法找到该对象。我认为这是因为对象是在使用" data ="指定的数据帧中定义的。 cch()函数中的参数。任何人都可以帮我这个吗?

示例数据:

my.list<-list(my.df1 <- data.frame(my.id = 1:100, my.time = rlnorm(100), 
my.event= c(rbinom(50,1,0.2),rep(1,50)), my.det=rbinom(100,1,0.5), 
sub= c(rep(1,50), rbinom(50, 1, 0.1))),  my.df2 <- data.frame(my.id = 1:100, 
my.time = rlnorm(100), my.event= c(rbinom(50,1,0.2),rep(1,50)), 
my.det=rbinom(100,1,0.5), sub= c(rep(1,50), rbinom(50, 1, 0.1))))

在我的用户定义函数之外,这可行:

library(KMsurv)
library(survival)
cch(Surv(my.time,my.event)~as.factor(my.det), data=my.df1, subcoh=~sub, 
id=~my.id, cohort.size=500)

然而,这不起作用(这是一个示例函数,而不是真正的函数,因为真实函数更复杂并且在多个数据集上运行分析,然后将它们组合起来):

myfun<-function(dflist,time,event){
for (i in 1:length(dflist)){
out<-cch(Surv(time,event)~as.factor(my.det), data=dflist[[i]], 
subcoh=~sub, id=~my.id, cohort.size=500)
print(out)}
}   
myfun(my.list,my.time,my.event)

我收到此错误:&#34; Surv错误(时间,事件):对象&#39; my.time&#39;找不到&#34;。

我发现了一些关于使用eval(substitute())函数来处理类似问题的帖子,但我无法让它工作。非常感谢任何建议!

1 个答案:

答案 0 :(得分:2)

试试这个。您需要记住,R并不知道my.timemy.event是什么。你必须用引号解析它们然后取消它们以便将它解析为Surv

myfun<-function(dflist,time,event){
  for (i in 1:length(dflist)){
    time <- noquote(time)
    event <- noquote(event)
    out<-cch(Surv(dflist[[i]][, time], dflist[[i]][, event])~as.factor(my.det), data=dflist[[i]], 
             subcoh=~sub, id=~my.id, cohort.size=500)
    print(out)}
}   
myfun(my.list,"my.time","my.event")