Передать аргументы функции из каждой строки матрицы - PullRequest
0 голосов
/ 11 февраля 2012

Я создал эту функцию:

nDone<- function (under,strike,ttoe,vol,rf,dy) {
    return(pnorm(((log(under/strike) + (rf-dy+(vol^2)/2)*ttoe)/(vol*(ttoe^0.5)))))
 }

nDone(90,100,3,0.17,0.05,0)
[1] 0.6174643

Пока все нормально и работает.Теперь я хочу, чтобы функция применялась к каждой строке матрицы.

b<- c(90,95,100,100,3,2,0.17,0.18,0.05,0.05,0,0)
dim(b) <- c(2,6)

Что дает:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   90  100    3 0.17 0.05    0
[2,]   95  100    2 0.18 0.05    0

Итак, теперь я хочу передать элементы в каждой строке функции,Я пытался использовать apply:

apply(b,1,nDone)

И получаю следующую ошибку:

Error in under/strike : 'strike' is missing

Я также пытался:

lapply(b,nDone)

Я получаюошибка:

Error in under/strike : 'strike' is missing

Я хочу получить несколько результатов функции.Что я тут не так делаю?

Ответы [ 2 ]

6 голосов
/ 11 февраля 2012

Это должно работать:

apply(b, 1, function(x)do.call(nDone, as.list(x)))

Что было не так в вашей версии, так это то, что через apply () ваша функция nDone () получала всю строку в виде одного аргумента, то есть вектор передавался как «strike» и ничего для других аргументов. Решением является использование do.call ().

3 голосов
/ 13 февраля 2012

Стоит отметить, что, если вы хотите связать результаты функций с исходной матрицей, вы можете использовать mdply из plyr

> library(plyr)
> mdply(b, nDone)

  X1  X2 X3   X4   X5 X6        V1
1 90 100  3 0.17 0.05  0 0.6174643
2 95 100  2 0.18 0.05  0 0.6249916
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...