2015-01-18 5 views
1
findols <- function(x) { 
    findol <- function(xrow) { 
    mdn <- median(xrow) 
    devs <- abs(xrow-mdn) 
    return(which.max(devs)) 
    } 
    return(apply(x,1,findol)) 
} 

Функция принимает матрицу и возвращает вектор, в котором каждый элемент соответствует наблюдению в каждой строке, наиболее удаленной от медианной.Определение одной функции внутри другой в R

Вопрос: Я не понимаю, как функция знает, что такое xrow. В упражнении функция была вызвана с использованием саморезов (x), где x - матрица. Как функция знает, как интерпретировать xrow как строку матрицы?

Thanks

ответ

0

xrow - формальный аргумент. Фактическим аргументом являются строки x.

Подумайте о применении (x, 1, sum) - это сумма строк x, правильно? Такая же идея в вашем примере.

Вы можете доказать это себе на простом примере:

> x <- cbind(rep(1,5), rep(2,5)) 
> x 
    [,1] [,2] 
[1,] 1 2 
[2,] 1 2 
[3,] 1 2 
[4,] 1 2 
[5,] 1 2 
> apply(x, 1, sum) 
[1] 3 3 3 3 3 
> 
2

Это то, что apply(x,1,findol) делает:

apply с 1 в качестве второго аргумента применить это функция (в вашем случае findol) к каждая строка его первого аргумента (в вашем случае x)

So findolsfindol(x[i,]) для i = 1 Число строк x. Применить также обрабатывает данные для вас и возвращает объект, содержащий результат всех строк.

Для получения дополнительной информации посмотрите на ?apply

0

Поскольку в функции apply, вы фактически делаете:

return(apply(x, 1, function(whichrow) findol(xrow = whichrow))) 

Посмотрите на то, что делает ?apply

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