@@ -157,6 +157,9 @@ median.dist_quantiles <- function(x, na.rm = FALSE, ..., middle = c("cubic", "li
157
157
if (length(quantile_levels ) < 2 || min(quantile_levels ) > 0.5 || max(quantile_levels ) < 0.5 ) {
158
158
return (NA )
159
159
}
160
+ if (length(quantile_levels ) < 3 || min(quantile_levels ) > .25 || max(quantile_levels ) < .75 ) {
161
+ return (stats :: approx(quantile_levels , values , xout = 0.5 )$ y )
162
+ }
160
163
quantile(x , 0.5 , ... , middle = middle )
161
164
}
162
165
@@ -204,22 +207,22 @@ quantile_extrapolate <- function(x, tau_out, middle) {
204
207
result <- tryCatch(
205
208
{
206
209
Q <- stats :: splinefun(tau , qvals , method = " hyman" )
210
+ quartiles <- Q(c(.25 , .5 , .75 ))
207
211
},
208
212
error = function (e ) {
209
213
return (NA )
210
214
}
211
215
)
212
216
}
213
-
214
- if (middle == " linear" || any(is.na(result ))) method <- " linear"
215
-
217
+ if (middle == " linear" || any(is.na(result ))) {
218
+ method <- " linear"
219
+ quartiles <- stats :: approx(tau , qvals , c(.25 , .5 , .75 ))$ y
220
+ }
216
221
if (any(indm )) {
217
222
qvals_out [indm ] <- switch (method ,
218
223
linear = stats :: approx(tau , qvals , tau_out [indm ])$ y ,
219
224
cubic = Q(tau_out [indm ])
220
225
)
221
- tau <- sort(unique(c(tau , tau_out [indm ])))
222
- qvals <- sort(unique(c(qvals , qvals_out [indm ])))
223
226
}
224
227
if (any(indl ) || any(indr )) {
225
228
qv <- data.frame (
@@ -230,10 +233,10 @@ quantile_extrapolate <- function(x, tau_out, middle) {
230
233
dplyr :: arrange(q )
231
234
}
232
235
if (any(indl )) {
233
- qvals_out [indl ] <- tail_extrapolate(tau_out [indl ], utils :: head(qv , 2 ))
236
+ qvals_out [indl ] <- tail_extrapolate(tau_out [indl ], head(qv , 2 ))
234
237
}
235
238
if (any(indr )) {
236
- qvals_out [indr ] <- tail_extrapolate(tau_out [indr ], utils :: tail(qv , 2 ))
239
+ qvals_out [indr ] <- tail_extrapolate(tau_out [indr ], tail(qv , 2 ))
237
240
}
238
241
qvals_out
239
242
}
0 commit comments