Использование положения строки в функции sapply - PullRequest
0 голосов
/ 05 мая 2019

Этот вопрос касается sapply доступа к номеру строки, из строки, над которой он работает. Я пытаюсь использовать sapply (или применимо) вместо цикла. Тем не менее, мне нужно знать, над какой строкой я работаю во время apply. Я могу переписать это, но я хотел бы сделать это с помощью функции применения.

Финансы: в рекомбинирующем биномиальном дереве u> 1 и d = 1 / u являются множителями цены акций. Чтобы найти цену в момент времени n, вы умножаете: время нулевой цены, u ^ # движения вверх, d ^ # движения вниз. # Вниз + # ир = п

s_t = function(s_tm, tree_path, move_ratio, u_or_d ='u'){
    u.z = move_ratio
    if (u_or_d == 'd') { u.z = 1/move_ratio }
    ud_coeff = u.z ^ (tree_path[1]-tree_path[2])
    s_tm * ud_coeff }

Эта s_t будет функцией FUN, поданной на sapply. переменная tree_path является кортежем / вектором (# вверх, # вниз). В любое время t они всегда суммируются в одно и то же число. Однако мне нужно изменить #up и #down для каждого узла в дереве.

Пример: S0 = 100, u = 1,25 d = 1 / u = 0,8, t = 3. Вернуть матрицу 4by1, представляющую возможные цены акций в момент времени 3 (т.е. вернуть S3)

S0 = 100; S1 = [125, 80]; S2=[156.25, 100, 64]; S3 = [195.3125, 125, 80, 51.2]

Я бы хотел получить S3, вызвав sapply для пустой матрицы, используя s_T в качестве функции для применения

prices = matrix(data=0, nrow =4, ncol=1)
stock_at_time_n = sapply(X = prices, 
    FUN = s_t, tree_path= (ROW#, LENGTH(prices) - ROW#), 
    move_ratio=1.25)

Результат должен быть

[195.3125, 125, 80, 51.2]

Не имеет значения, является ли это матрица, вектор и т. Д. В данный момент, так как я могу просто изменить это с помощью as.Whatever_I_want()

Какая правильная запись для tree_path= (ROW#, LENGTH(prices) - ROW#), чтобы я мог получить вывод S3?

1 Ответ

0 голосов
/ 12 мая 2019

В общем, чтобы получить доступ к индексу объекта R в цикле sapply, вы должны использовать seq_along.Что-то вроде:

sapply(X = seq_along(prices),
       FUN = function(i) {
               s_t(s_tm=100, 
                   tree_path= c (i,length(prices)-i),
                   move_ratio = 1.25)
              })

Или действительно, как вы используете sapply, вы можете просто использовать 1:n, где n = 4 в вашем случае.Спасибо и удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...