Я пытаюсь воспроизвести следующий код (функция nls не работает должным образом), но с дополнительной реализацией, использующей циклы for, sprintf и as.formula(), которые добавляют переменные в зависимости от количества пиков в заданном спектре. Чтобы быть более последовательным среди пиков, я векторизовал имена переменных для каждого пика, поэтому пик номер 1 имеет связанные с ним «альфа [1]», «пик [1]» и «высота [1]».
Пока что я получил ожидаемую формулу:
height[1]/(pi*alfa[1]*(1+((x-peak[1])/alfa[1])^2))+height[2]/(pi*alfa[2]*(1+((x-peak[2])/alfa[2])^2))+drift.a+drift.b*x
Тем не менее, у меня возникают некоторые проблемы, когда я пытаюсь воспроизвести ту же систему для линии par
. Это должно показать:
par=c(alfa[1]=0.001,
peak[1]=2.156460,
height[1]=1,
alfa[2]=0.001,
peak[2]=2.170150,
height[2]=1,
drift.a=0,
driftb=0)
Но вместо этого, когда я свернул все строки и впоследствии использовал команду as.formula
, я получил:
Error en parse(text = x) : <text>:1:15: unexpected '='
1: par=c( alfa[1]=
^
Если я напечатаю свернутую строку, строка символов будет ожидаемой, поэтому я думаю, что она будет каким-то образом связана с командой as.formula (т.е. это может быть не соответствующая команда)
par <- c(0.001, 2.15646,...); names(par) <- c(alfa[1], peak[1],...)
. - person Jake Burkhead   schedule 30.01.2014par
. Но в любом случае, я подозреваю, что проблема заключается в попытке создать имена типа alfa[1], посколькуR
пытается найти первый элемент объектаalpha
. Если вы просто напишетеpar=c(alfa1=1,peak1=2,...
, это, вероятно, будет хорошо проанализировано. - person Carl Witthoft   schedule 30.01.2014