применять разные функции к разным элементам вектора в R

применить легко, но это вкратце для меня:

В многопараметрической регрессии оптимизаторы используются для поиска наилучшего соответствия параметрической функции, например, x1, x2 Data. Часто оптимизаторы могут работать быстрее, если они пытаются оптимизировать преобразованные параметры (например, с помощью оптимизаторов R, таких как DEoptim, nls.lm). По опыту я знаю, что разные преобразования для разных параметров из одной параметрической функции даже лучше.

Я хочу применить разные функции в x.trans (см. Ниже) к разным, но соответствующим элементам в x.val:

Фальшивый пример для работы.

#initialise
x.val <- rep(100,5);      EDIT: ignore this part ==>  names(x.val) <- x.names
x.select <- c(1,0,0,1,1)
x.trans <- c(log10(x),exp(x),log10(x),x^2,1/x)

#select required elements, and corresponding names
x.val = subset(x.val, x.select == 1)
x.trans = subset(x.trans, x.select == 1)

# How I tried: apply function in x.trans[i] to x.val[i]
...

Любые идеи? (Я пробовал применять и sapply, но не могу получить доступ к функциям, хранящимся в x.trans)


person Toby    schedule 05.07.2013    source источник
comment
Этот пример действительно не работает, поскольку x.trans должен быть функцией, насколько я понимаю?   -  person Maxim.K    schedule 05.07.2013
comment
Ваш пример не готов к запуску. Где x и x.names? Я правильно вас понял? Вы хотите разбить x.val на группы и применить к каждой группе разные функции?   -  person Matthew Plourde    schedule 05.07.2013
comment
@MatthewPlourde Afaik он хочет применить 1-ю функцию к 1-му элементу, 2-ю функцию ко 2-му элементу и т.д., при условии предыдущего выбора. Так что, наверное, нужен список функций.   -  person Maxim.K    schedule 05.07.2013
comment
Теперь я понимаю, что пропустил комментарий в конце, что делает его ясным. @TobyElTejedor, взгляни на ?mapply.   -  person Matthew Plourde    schedule 05.07.2013
comment
Хороший вопрос, хороший ответ.   -  person Maxim.K    schedule 05.07.2013


Ответы (1)


Вместо этого вы должны использовать это:

x.trans <- c(log10,exp,log10,function(x)x^2,function(x)1/x)

Тогда это:

mapply(function(f, x) f(x), x.trans, x.val)
person Ferdinand.kraft    schedule 05.07.2013