2016-11-06 5 views
0

Я пытался отладить это в течение последних 2 дней, применяя все возможные исправления, найденные здесь в Stack Overflow, но я все еще получаю различные ошибки, я знаю, что я могу сделать больше.R: разные ошибки при использовании apply()

dat - это кадр данных с 3051 строками и 38 столбцами, взятый из набора данных golub в многопроцессорной библиотеке. образец ДАТ:

> 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). Тем не менее, я получаю эту ошибку:

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

Удаление точно = F, альтернативный = "two.sided", правильно = T дает мне новую ошибку ошибка в х [s1]: 0 могут быть смешаны только с отрицательными индексами.

достаточно Funnily в каком-то момент я получил ошибку ошибки х [s1,]: неправильное число измерений выполняющих ту же строку коды (с «неиспользованными аргументами» не удалена из wilcox.test) , но это было 2 дня назад, и я не смог воспроизвести его снова.

Я также пробовал lapply() и mapply(), но я получаю ту же ошибку неиспользуемых аргументов.

То, что я пытаюсь достичь: wilcox.test(), если я правильно понимаю проблему, следует применять к каждой строке, где вектор x состоит из столбцов с 1 по 28, а столбцы векторов y 29 - 38.

Прошу прощения, если это глупая простая проблема, которую мне не хватает. Я просто не знаю, что это такое :(

Редактировать: теперь это работает (как и код Parfait) после перезапуска R ... извините, это должно было быть чем-то, что я пробовал первым, прежде чем публиковать это. .

+0

Пожалуйста 'dput() 'ваши данные. Наведите указатель на тег' r' для получения дополнительной информации. –

+0

@ Hack-R Извините, это мои ели t время публикации о R. Как мне «dput» мои данные? Вы имеете в виду, что я должен был бы '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