2014-03-24 101 views
1

我正在嘗試爲需要多次執行的任務編寫一個函數(在多個估算數據集上運行cox比例風險函數)。但是,當我將必要的對象傳遞給用戶定義的函數時,它會發出錯誤,指出找不到該對象。我認爲這是因爲該對象是在cch()函數中的「data =」參數指定的數據框中定義的。誰能幫我這個?用戶定義的函數eval()函數中出現「Object not found」錯誤?

實施例的數據:

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) 

I得到這個錯誤:「錯誤Surv(時間,事件):對象'my.time'未找到」。

,我發現關於使用一個eval(替代())函數來處理類似問題的一些帖子,但我不能得到它的工作。任何建議,非常感謝!

+0

你做它更多的變數計劃,從而使其能夠輸入時間/事件是非常重要的?或者你只是想做多個data.frames? –

+0

你確定你是對的?首先,您應該將'my.det'傳遞給您的函數,以避免它依賴於父級環境。其次,我敢打賭,你的'my.list'有一個太多的子級別的列表,所以'dflist [[i]]'並不指向你的想法。 –

+0

@詹姆斯托賓,是的,我需要能夠放入不同的時間/事件變量。另外,我希望能夠輸入不同的決定因素/解釋變量,但爲了簡單起見,我沒有提到這一點。儘管如此,也給出了相同的錯誤。 –

回答

1

試試這個。你需要記住R不知道my.timemy.event是什麼。你必須用引號來分析它們,然後unqoute他們爲了將它解析爲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") 
+0

謝謝你指出錯誤,我改變了它。 –

+0

我的代碼適合你嗎? –

+0

謝謝你的建議。您的解決方案有效,但並不能真正解決我的問題,因爲我需要能夠放入不同的「時間變量」和「事件變量」。優選地,我還會在「my.det」這個行列式中靈活一些。還有什麼建議? –

相關問題