#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