2014-11-14 4 views
0

Напишите свою собственную функцию, которая возвращает 75-й процентиль вектора. Примените эту функцию ко всем столбцам матрицы b.R - function, matrix, apply

Вот матрица Ь:

b = matrix(runif(1000*18, min=1000, max=10000), 1000, 18) 

А вот функция, которую я создал с помощью индексации.

percentileOfAVector <- function(vector,percentile){ 
    adjustedVector=vector[0:floor(percentile * length(vector))] 
    return (adjustedVector) 
} 

Мне было интересно, могу ли я использовать функцию apply для настройки вектора b, который у меня есть. Или я должен использовать цикл for?

PS: Я пытался сделать это с помощью цикла for, но у меня были некоторые проблемы с cbind, когда я пытался сохранить результаты своей функции в матрице.

Любая помощь была бы принята с благодарностью.

+0

Я думаю, что ваш вопрос должен быть немного более конкретным. Можете ли вы использовать функцию apply для настройки вектора b? Да! –

+1

Возможно, вы захотите перефразировать первое предложение, чтобы оно не звучало как домашнее задание. –

+1

Немного семантики, которую вы, кажется, пропустили. Процентиль - это одно число (и в статистическом выражении это «статистика порядка»). Возвращение сокращенного вектора не даст вам никаких точек в вашей HW. –

ответ

0

Если вы хотите, чтобы получить процентиль вектора (одно значение):

apply(b, 2, function (x) quantile(x, prob=0.75)) 

Но, кажется, это не то, что вы имеете в виду с процентили. Если вы хотите вернуть вектор с наблюдениями, которые попадают в 75-й процентиль:

percentOfVector <- function(vector, percentile) { 
    perc <- quantile(vector, prob=percentile) 
    vector[which(vector <= perc)] 
} 

apply(b, 2, function (x) percentOfVector(x, 0.75))