2016-11-06 1 views
0

지난 2 일 동안이 오류를 디버깅하려고 시도했지만 스택 오버플로에서 발견 된 모든 가능한 수정 사항을 적용했지만 여전히 다양한 오류가 발생했습니다. 더 이상 내가 무엇을 할 수 있는지 안다.R : apply() 사용과 다른 오류가 발생했습니다.

dat은 멀티 테스트 라이브러리의 golub 데이터 세트에서 가져온 3051 행 38 열의 데이터 프레임입니다. DAT의 샘플 :

> dat[1:5, 1:5] 
    V1  V2  V3  V4  V5 
g1 -1.45769 -1.39420 -1.42779 -1.40715 -1.42668 
g2 -0.75161 -1.26278 -0.09052 -0.99596 -1.24245 
g3 0.45695 -0.09654 0.90325 -0.07194 0.03232 
g4 3.13533 0.21415 2.08754 2.23467 0.93811 
g5 2.76569 -1.27045 1.60433 1.53182 1.63728 

나는 정의이 기능이 있습니다

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

을하고 나는 그것을 적용하려고 : 내가 원하는

> apply(dat, 1, wilcox.func, s1=c(1:27), s2=c(28:38)) 

실행에 wilcox.test () 함수는 처음 27 개의 열을 x로하고 나머지 열은 y (golub.cl을 기반으로 함)로 사용합니다. 그러나, 나는이 오류를 얻을 : 0 만의 혼합 될 수있다 정확한 = F를 제거

Error in wilcox.test(x1, x2, exact = F, alternative = "two.sided", correct = T) : 
    unused arguments (exact = F, alternative = "two.sided", correct = T) 

, 대체 = "two.sided을"올바른는 = T 나에게 X [S1]에서 새로운 오류 오류를 제공합니다 부의 첨자는입니다. (wilcox.test에서 제거 하지은 "사용하지 않는 인자"와) 동일한 코드 라인을 실행 차원의 잘못된 번호 :

는 충분히 재미있게 어떤 점에서 나는 또한 X의 [S1을] 오류 오류가 발생했습니다 ,하지만 그것은 2 일 전이었고 나는 그것을 다시 재현 할 수 없었습니다.

나는 또한 lapply()와 mapply()를 시도했지만 사용하지 않은 인수 오류와 같은 오류가 발생합니다.

내가 얻으려고하는 : wilcox.test() 올바르게 문제를 이해하는 경우 x 벡터 열 1 28 및 y 벡터 열 29로 구성된 각 행에 적용해야합니다. 38.

이것이 단순히 간단한 문제인 경우 사과드립니다. 나는 그것이 무엇인지 모르겠다. (

편집 : R을 재시작 한 후 지금은 (파르페의 코드와 마찬가지로) 작동한다 ... 죄송합니다. 아마도이 게시물을 게시하기 전에 먼저 시도했을 것입니다. ..

+0

하세요'dput을()'귀하의 데이터. 자세한 정보는'r' 태그 위로 포인터를 가져 가십시오. –

+0

@ Hack-R 미안 해요, 내 전나무예요. R에 관한 시간 게시. 데이터를 어떻게 처리합니까? 내 게시물에 'library (multtest)' 'dput (data (golub))' 이 있어야한다는 뜻입니까? – Melissa

+0

나는 당신이하려는 것을 얻을 수 있을지 확신하지 못합니다. 모든 열 조합에 대한 별도의 테스트, 즉 28x9 = 252 테스트를 의미합니까? – Joe

답변

1

아래는 샘플 데이터를 사용하면 열이 각 행에 대해 범위로 슬라이스 할 필요가 있기 때문에 sapply() 또는 vapply()은 행 번호에 걸쳐 반복 (출력 유형을 미리 정의 할) 고려하지만, 전체 .dat에 적응 :

# READ IN SAMPLE dat 
data =' 
V0  V1  V2  V3  V4  V5 
g1 -1.45769 -1.39420 -1.42779 -1.40715 -1.42668 
g2 -0.75161 -1.26278 -0.09052 -0.99596 -1.24245 
g3 0.45695 -0.09654 0.90325 -0.07194 0.03232 
g4 3.13533 0.21415 2.08754 2.23467 0.93811 
g5 2.76569 -1.27045 1.60433 1.53182 1.63728' 

dat <- read.table(text=data, header=TRUE, stringsAsFactors=FALSE) 

# ADJUSTED FUNCTION 
wilcox.func <- function(s1, s2) { 
x1 <- as.numeric(s1) 
x2 <- as.numeric(s2) 

w.out <- wilcox.test(x1, x2, exact=F, alternative="two.sided", correct=T) 
out <- as.numeric(w.out$statistic) 
return(out) 
} 

output <- sapply(seq_len(nrow(dat)), function(i) 
    wilcox.func(dat[i, c(2:4)], dat[i, c(5:6)]))  
output 
# [1] 2 4 4 3 3 

output <- vapply(seq_len(nrow(dat)), function(i) 
    wilcox.func(dat[i, c(2:4)], dat[i, c(5:6)]), 
    numeric(1))  
output 
# [1] 2 4 4 3 3 
+0

@Parfait에 감사드립니다.하지만 슬프게도 여전히 wilcox.test()와 같은 미사용 인수 오류가 발생합니다 : ( – Melissa

+0

어떻게 가능합니까? 이것은 wilcox.test의 샘플 데이터와 정확한 인수를 사용합니다. 당신은 실제 코드에 통합하고 있습니다.이 솔루션을 실행하고 (샘플 데이터 포함) 오류가 발생 했습니까? – Parfait

+0

전체 데이터 세트'dat <- read.table (text = data (golub), header = TRUE, stringsAsFactors = FALSE)'샘플을 사용하는 대신 ... R 세션을 다시 시작하고 코드를 다시 실행하려고합니다 – Melissa

관련 문제