2013-08-02 2 views
0

3051 개의 유전자와 38 개의 열 (두 개의 클래스 레이블 - 27 개의 열, 하나의 레이블 : 0, 11 개의 열, 다른 레이블 : 1)이있는 데이터 프레임 (golubdf)이 있습니다. 각 반복마다 데이터 프레임의 열을 섞어서 (클래스 레이블을 섞어서), 모든 유전자에 대해 Wilcox 테스트를 계산하고 목록에 저장된 모든 유전자에 대해 최대 테스트 통계를 계산할 수 있도록 for 루프를 500 번 반복해야합니다. :Wilcox.test in R (최대 테스트 통계)

t.test.all.genes <- function(x,s1,s2) { 
    x1 <- x[s1] 
    x2 <- x[s2] 
    x1 <- as.numeric(x1) 
    x2 <- as.numeric(x2) 
    t.out <- wilcox.test(x1,x2, alternative="two.sided", exact=F, correct=T) 
    out <- as.numeric(t.out$statistic) 
    return(out) 
} 

prs = replicate(500, apply(golubdf[ ,sample(ncol(golubdf))], 1, 
       t.test.all.genes, s1=labels==0, s2=labels==1)) 
ps.max = apply(prs, 1, max) 

나는이 맞다면 확실하지 않다 - 나는 행 또는 열을 사용해야합니까? 모든 유전자에 대해 최대 테스트 통계가 필요하므로 행 (1)을 사용했습니다. 이 후에는 최대 테스트 통계 목록에서 95 % 값 테스트 통계를 가져와야합니다. 테스트 통계를 얻는 방법을 잘 모르겠습니다.

+3

예제 데이터가 없으면 도움을 받기가 매우 어렵습니다. 데이터 제공 방법을 배우려면 [FAQ] (http://stackoverflow.com/q/5963269/1412059)를 읽으십시오. – Roland

+0

R에서 golub 데이터를 사용하고 클래스 레이블이 동일한 데이터 (첫 번째 27 개 샘플 및 AML 중 나머지 11 개) – ser2207860

+0

변경된 유일한 것은 모든 3051 레코드에 대한 이름을 변경 한 것입니다. (golubdf) = c (paste ("g", 1 : 3051, sep = "")) 레이블 <- golub.cl \t # 클래스 레이블 ALL = 0; AML = 1 labelgb <- factor (c (rep ("ALL", 27), rep ("AML", 11))) – ser2207860

답변

0

ps.max = apply (prs, 1, max) 행으로 인해 오류가 발생합니다. 그냥 ps.max = max (prs)를 시도하십시오. 또한 귀하의 요구 사항에 따라, 당신은 밖으로 넣어 목록에 넣어 저장해야합니다. 먼저 다음과 같이 빈 목록을 만듭니다.

myList < -list(). 그런 다음 for 루프 내부에 최대 값을 목록에 계속 삽입합니다.

감사합니다.