применить функцию к каждому столбцу, используя разные параметры - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу применить функцию BoxCox к каждому столбцу матрицы временных рядов:

lapply(ts_data, function(x,lambda) {BoxCox(x,lambda)}, lambda = 0.4)

Проблема в том, что я не хочу фиксировать лямбду для каждого столбца в фиксированном глобальном параметре.Вместо этого у меня есть вектор vec_lambda, содержащий разные лямбды, для каждого столбца ts_data предварительно вычислялся какой-то другой vec_lambda.

Есть идеи, как использовать lapply или что-то подобное?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Кроме того, вы можете использовать mapply, mapply имеет методы для data.frame и list

#a bit modified from mapply help page example
mapply(function(x, y) sqrt(x) + y,  #BoxCox
   data.frame(x=c(1,2,3),y=c(4,5,6),z=c(7,8,9)),  #ts_data
   c(A = 10, B = 0, C = -10)) .  #lambda
0 голосов
/ 26 сентября 2018

Если это data.frame, мы можем использовать Map

Map(BoxCox, ts_data, lambda = v1)

, где 'v1' - это значения vector из lambda, которые равны количеству столбцов'ts_data'


Если это matrix, то цикл по последовательности столбцов

lapply(seq_len(ncol(ts_data)), function(i) BoxCox(ts_data[,i], lambda = v1[i]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...