r "Object not found"用户定义的函数 eval() 函数中的错误?



我正试图为我需要多次执行的任务编写一个函数(在多个输入数据集上运行cox比例风险函数)。然而,当我将必要的对象传递给用户定义的函数时,它会给出一个错误,指出找不到该对象。我认为这是因为对象是在cch()函数内用"data="参数指定的数据框架内定义的。有人能帮我一下吗?

示例数据:

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)

我得到这个错误:" error in Surv(time, event): object 'my. "时间"未找到".

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

试试这个。你需要记住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")

最新更新