2015-04-09 2 views
4

Я написал эту функциюПрименить функцию двух аргументов в п два матрицы

tippett <- function(p1, p2) { 
    t <- 1 - (1 - min(p1, p2))^2 
    return(list(p.value=t)) 
} 

, и я хотел бы применить его в матрице сгенерированных чисел горизонтально. Например, в этой матрице: z <- matrix(c(rbeta(5, 1, 5), rbeta(5, 1, 10)), ncol=2).

apply К сожалению, кажется, не работает и использовать его таким образом s<-apply(z,1,tippett)

генерирует эту ошибку

Error in FUN(newX[, i], ...) : argument "p2" is missing, with no default 

Не могли бы вы сказать мне, как я могу обойти это? Надеюсь обобщить эту процедуру на тысячи строк, и я не могу представить ее вручную.

спасибо.

ответ

3

Я думаю, что вы могли бы изменить свою функцию ...

tippett<-function(p){ 
t<-1-(1-min(p))^2 
return(list(p.value=t)) 
} 

Тогда ваш вызов функции должен работать. (Я не проверял это, хотя ...)

s<-apply(z,1,tippett) 

В качестве альтернативы, если вы не можете изменить эту функцию, вы можете попробовать что-то вроде ...

s <- sapply(seq_along(nrow(z)), function(i) tippett(z[i,1], z[i,2])) 

Я считаю, что все должны работать. Извините, сейчас работает какой-то код и не могу проверить/проверить его.

+0

Это действительно работает, спасибо. Разве это обобщается на более высокие размеры? Я имею в виду более чем два элемента строки. – JohnK

+0

@JohnK Функция tippett принимает вектор. Итак, да, я думаю, если бы у вас были строки из элементов 24973535, они бы взяли только первые два и сгенерировали результат. – lukehawk

+0

Скажите, что я включаю третий столбец в матрице или еще десять, как я могу изменить эту функцию, чтобы взять минимум из всех этих элементов в каждой строке? – JohnK

3

Попробуйте это в одной строке:

tippet2 = function(z) as.list(1-(1-do.call(pmin, as.data.frame(z)))^ncol(z)) 

tippet2(z) 
  • Это векторизации.
  • Это относится к вашей матрице или матрице с большим количеством столбцов.
+0

Хорошо, я также нашел, что 'tippett <-function (p) { t <-1- (1-min (p))^(длина (p)) return (list (p.value = t)) } применяется к большему количеству строк. – JohnK

+0

Сила зависит от номера матрицы столбцов? –

+0

Разве это не число элементов строки? – JohnK

Смежные вопросы