2013-07-05 2 views
4

применяются легко, но это скорлупа для меня, чтобы взломать:применять различные функции для различных элементов вектора в R

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

Я хотел бы использовать различные функции в x.trans (C.F. ниже), чтобы разные, но в их положении, соответствующем элементам в 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)

+0

В пример действительно не работает, поскольку x.trans должна быть функцией, насколько я могу понять? –

+0

Ваш пример не готов к запуску. Где 'x' и' x.names'? Правильно ли я вас понимаю? Вы хотите разбить 'x.val' на группы и применять разные функции для каждой группы? –

+1

@MatthewPlourde Afaik он хочет применить 1-ю функцию к 1-му элементу, 2-й функции ко второму элементу и т. Д., При условии предыдущего выбора. Поэтому, вероятно, необходим список функций. –

ответ

10

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

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

Тогда это:

mapply(function(f, x) f(x), x.trans, x.val) 
Смежные вопросы