Этот вопрос касается 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?