Векторное вычисление со списком данных - PullRequest
0 голосов
/ 26 августа 2018

У меня есть функция, которая выглядит следующим образом:

calc_func <- function(data, n) {
    return(sum((data[1]**(1/n))*(data[2]/sum(data[2]))**n)
}

В основном data - это просто список из двух столбцов (загруженный из файла .txt), который выглядит следующим образом:

       col_data1      col_data2 
1      0.005          1.921053e+01
2      0.015          9.410499e-01
3      0.025          7.493472e-01
4      0.035          6.231897e-01
5      0.045          5.354181e-01

Так что, если n = 0.5 или что-то в этом роде, то просто принимает каждое значение col_data1 до степени 1/n, а затем все суммируется до степени n и суммирует все в одно значение.

Однако мне нужно сделать это для "многих" n, например n <- seq(0.1, 1, 0.01), и я знаю, что, возможно, я мог бы просто создать простой цикл и выполнить итерации по n и получить length(n)значения, но из-за предыдущих и будущих расчетов я бы очень хотел избежать циклов из-за скорости.Так есть ли способ, которым я могу использовать вектор n, где каждое отдельное значение будет использоваться как отдельный вход в функцию?Если я просто запускаю это, я получаю новый вектор / список со значениями length(n), но что-то не так, и значения совсем не такие, какими они должны быть (я не уверен, что на самом деле делает, если честно).

1 Ответ

0 голосов
/ 26 августа 2018

Вам нужно mapply:

Допустим, вы хотите сделать это для n=2 - n=4, и ваши данные хранятся в фрейме данных с именем df, затем:

mapply(calc_func, n=seq(2,4), MoreArgs = list(data=df))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...