2013-10-15 29 views
0

我發現自己經常需要對數據集的子集(使用由一個或兩個因素提供的子集)進行多對配對比較。 現在,我將非常容易地在一個函數中以一種全面的方式做到這一點。在數據框架中跨因素進行多對wilcoxon測試

這是我有:

wilcox.pseudomedian <- function(x,conf.int=TRUE,na.rm=TRUE){ 

    if(length(x) > 3){ 
    ht <- wilcox.test(x,conf.int=conf.int,na.rm=na.rm) 
    return(ht$estimate[[1]]) 
    }else{ 
    return(NaN) 
    } 
} 

pairedwtest <- function(x,y){ 
    ht <- wilcox.test(x,y,paired=TRUE) 
    out <- wilcox.reportAPA(ht) 
    return(out) 
} 

wilcox.reportAPA <- function(ht){ 

    out <- paste(names(ht$statistic)[[1]],"=",ht$statistic,",p=",ht$p.value,sep="") 
    return(out) 
} 

然後,我會希望能夠在整個數據幀在我公司供應的方式應用這些功能。這是我到目前爲止......

wilcox.masstest <- function(data,factorlist,speakervar,groupvar,measurevar){ 
    melt(data,id.vars=c(factorlist,speakervar,groupvar),measure.vars=measurevar) -> mdf 
    form <- as.formula(paste(paste(c(factorlist,speakervar), collapse= "+"),"~",groupvar)) 

    outdf <- dcast(mdf, form,fun.aggregate=wilcox.pseudomedian) 
    outdfn <- names(outdf) 
    mlvls <- setdiff(outdfn,factorlist) 

    for(curr in 2:(length(mlvls))){ 
     fac1 <- mlvls[curr -1 ] 
     fac2 <- mlvls[curr] 
     facname <- paste(fac1,fac2,sep="-") 
     facnamerev <- paste(fac2,fac1,sep="-") 

     ddply(outdf,factorlist,summarize,results=pairedwtest(get(fac1),get(fac2))) -> out 
    } 
    return(out) 
} 

..但有問題的位是最後的ddply調用。 012dfoutdf數據框看起來是這樣的:(最後三列是我想要迭代測試在Patient列之前的所有列的因子級別給出的數據的每個子集內的差異(在這種情況下))。

  Task Patient Control Med OFF  Med ON 
115 Spontaneous P45zi 0.12044504 0.06940783 0.12044504 
116 Spontaneous P46zi 0.20694651 0.13495089 0.02022240 
117 Spontaneous P47zi 0.13556909 0.10433863 0.10433863 
118 Spontaneous P48zi 0.07519881 0.02795007 0.12044504 
119 Spontaneous P49zi 0.02022240 0.01220851 0.12044504 

現在,ddply調用失敗與

「錯誤GET(FAC1):對象FAC1」未找到「

警告。 如何以某種方式向ddply提供因子名稱,以便在撥打電話時找到變量。我相信我可以通過粘貼電話然後評估文本來做到這一點,但這似乎是一個非常糟糕的主意......

任何想法?

+0

'fac1'和'fac2'應該是data.frame'outdf'中的列。 –

+0

確實,但我需要的是'fac1'和'fac2'的**內容**應該是'outdf'中的列名。 –

回答

0

如果您還想給出一個示例數據集,它會更容易幫助您。但是,問題可能如此簡單:

> mlvls <- runif(20, 1,10) 
> mlvls[2] 
[1] 6.617676 
> mlvls[3] 
[1] 6.788338 
> fac1 <- mlvls[2] 
> fac2 <- mlvls[3] 
> get(fac1)   # will not work 
Fehler in get(fac1) : ungültiges erstes Argument 
> get("fac2")  # will work 
[1] 6.788338 
相關問題