интерполяция — r приблизительно() возвращает NA при использовании параметра xout

#r

Вопрос:

вот мои данные, представляющие коэффициент отражения, наблюдаемый на каждой длине волны (wl):

 wl lt;- c(442.7, 492.4, 559.8, 664.6, 704.1, 740.5, 782.8, 832.8, 864.7, 945.1, 1613.7, 2202.4) pt_1 lt;- c(0.024, 0.0265, 0.0575, 0.0457, 0.1003, 0.2672, 0.3447, 0.3732, 0.3814, 0.3739, 0.1704, 0.0907) pt_2 lt;- c(0.0234, 279, 57, 0.0454, .0963, .2642, 3446, .365, 0.3864, .3919, .1726, 0.0884)  mydata lt;- data.frame(wl, pt_1, pt_2)  

это делает то, что я ожидаю, если не полностью то, что я хочу, возвращая df с интерполированными значениями для всех столбцов:

 interp lt;- as.data.frame(apply(mydata, 2, function(x) approx(x, y = NULL, method = "linear", n = 20)$y))  

Я хочу указать xout значения (в соответствии с моим пониманием ?approx ):

 interp1 lt;- as.data.frame(apply(mydata, 2, function(x) approx(x, y = NULL, method = "linear", xout = c(450, 550, 670, 700, 704, 706, 740.5, 750, 950, 1510))$y)) #  

но это производит только NAs. Кто-нибудь может увидеть мою ошибку?

еще лучше, я хотел бы сохранить исходные длины волн, определив их в xout :

 wl_orig lt;- as.vector(mydata$wl) interp1 lt;- as.data.frame(apply(mydata, 2, function(x) approx(x, y = NULL, method = "linear", xout = c(wl_orig, 450, 550, 670, 700, 704, 706, 740.5, 750, 950, 1510))$y)) #   

Комментарии:

1. Ваш xout путь слишком огромен: поскольку y он не передается в функцию, wl действует как ответ, а индексы действуют как predictor , следовательно, xout может принимать значения от 1 до 12 или что-то ближе к length(wl) пределу, за которым экстраполяция полностью провалится.

2. спасибо @Onyambu. Согласно документам, xout это «необязательный набор значений, указывающий, где должна выполняться интерполяция». Для меня это говорит о ценности(ценностях) x того, что я хочу знать y . Или я что — то не так понял? Мне нужно пройти y ? Если да, то я знаю, как это сделать, поскольку я подаю заявку по всем столбцам. Не могли бы вы привести рабочий пример?

3. Если вы не пройдете y, то ваша литерала будет проходить баллы (1,442.7), (2, 492.4), (3,…) и т.д. Показывает tgat x=1,2,3,4… в то время как y =442,7, 492,4 … теперь вы заметите, что x=1:12. Ваш xout имеет значения gt;400. Не логично экстраполировать 400 из 12. Вы могли бы сделать xout=(13,14,15,20), чтобы увидеть экстраполяцию. Ie определенно не будет NA, так как эти значения близки к 12