запустить функцию с несколькими значениями для нескольких аргументов, которые не являются первыми - PullRequest
2 голосов
/ 08 декабря 2010

В R, если у меня есть функция

myfun<-function(ys, T, N, beta, gamma, sigma) {...}

где бета и гамма - это скаляры.

Если у меня есть фиксированные значения для ys, T, N и sigma, но вектор значений бета и вектор значений для гаммы, возможно ли запускать myfun каждый раз с каждой возможной комбинацией значений для беты и гамма

Я рассматриваю lapply, но не знаю, как указать, что аргументы с большим количеством значений, которые нужно попробовать, не являются первым аргументом в функции и также не являются просто одним аргументом.

Или мне нужно переписать функцию myfun, чтобы к ней можно было применить или аналогичные?

Или я должен использовать цикл?

Спасибо и всего наилучшего!

Ответы [ 2 ]

6 голосов
/ 09 декабря 2010

Давайте в качестве примера воспользуемся удобной функцией с несколькими аргументами, например dt (). Мы будем ("mult") - предоставлять 2 аргумента "параллельно" и ("const") - предоставлять фиксированные значения для двух других. Создайте фрейм данных с expand.grid для списков с несколькими аргументами, а затем передайте его mapply с соответствующими именами и используйте MoreArgs для оставшихся аргументов;

gamma <- 1:3 
beta <- 1:4
gb.df <-expand.grid(gamma=gamma, beta=beta)
mfun <- dt
mapply ("mfun", x=gb.df$gamma, df=gb.df$beta, MoreArgs=list(ncp=1, log=FALSE) )
    [1] 0.26355595 0.14379745 0.07896827 0.31785177 0.17910975 0.08636815
    [7] 0.34118167 0.19555939 0.08572842 0.35411486 0.20513016 0.08355531
2 голосов
/ 08 декабря 2010

Посмотрите на функции mapply и Vectorize вместе с expand.grid для части всех комбинаций.

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