Я измеряю множество различных химических соединений, каждое из которых имеет свою калибровочную кривую, используя один прибор.Я хотел бы применить правильную калибровочную кривую, основанную на названии соединения, к необработанным данным к необработанным данным с прибора.Итак, я начинаю с нескольких калибровочных кривых и фрейма данных необработанных данных:
#generate the calibration curves
x <- 1:10
calib.data.1 <- x+runif(10)
lm.1 <- lm(calib.data.1~x)
calib.data.2 <- 2*x+runif(10)
lm.2 <- lm(calib.data.2~x)
Необработанные данные выглядят так:
compound <- factor(c("cpd1", "cpd2"))
values <- runif(2)
raw <- data.frame(compound, values)
Кажется, что это элегантный способ выбораправильная калибровочная кривая будет включать ddply или подобное.Однако я не могу понять, как это сделать, не написав функцию по следующим направлениям:
choose.calib <- function(raw, cpd)
if(cpd=="cpd1"){
calib=coef(lm.1)[1]+val*coef(lm.2)[2]
}else{
if(cpd=="cpd2"){
calib=coef(lm.2)[1]+val*coef(lm.2)[2]
}else{
warning("no calib curve for compound")}}
}
Тогда я бы сделал что-то вроде
cal<-ddply(raw, .(compound), choose.calib)
(что все равно не работаетиз-за моей неспособности понять «если-еще», но я думаю, что смогу решить это самостоятельно)
Есть ли более векторизованный способ сделать это?