Как я могу использовать maxgap с na.fill в зоопарке или XTS?

self.urlSession.dataTask(with: request, completionHandler: { (data, response, error) in
            self.endNetworkActivity()

            var responseError: Error? = error
            // handle http response status
            if let httpResponse = response as? HTTPURLResponse {

                if httpResponse.statusCode > 299 , httpResponse.statusCode != 422  {
                    responseError = NSError.errorForHTTPStatus(httpResponse.statusCode)
                }
            }

            var apiResponse: Response
            if let _ = responseError {
                apiResponse = Response(request, response as? HTTPURLResponse, responseError!)
                self.logError(apiResponse.error!, request: request)

                // Handle if access token is invalid
                if let nsError: NSError = responseError as NSError? , nsError.code == 401 {
                    DispatchQueue.main.async {
                        apiResponse = Response(request, response as? HTTPURLResponse, data!)
                        let message = apiResponse.message()
                        // Unautorized access
                        // User logout
                        return
                    }
                }
                else if let nsError: NSError = responseError as NSError? , nsError.code == 503 {
                    DispatchQueue.main.async {
                        apiResponse = Response(request, response as? HTTPURLResponse, data!)
                        let message = apiResponse.message()
                        // Down time
                        // Server is currently down due to some maintenance
                        return
                    }
                }

            } else {
                apiResponse = Response(request, response as? HTTPURLResponse, data!)
                self.logResponse(data!, forRequest: request)
            }

            self.removeRequestedURL(request.url!)

            DispatchQueue.main.async(execute: { () -> Void in
                completionHandler(apiResponse)
            })
        }).resume()
4
задан paul79 16 January 2019 в 16:22
поделиться

2 ответа

Я не очень знаком с зоопарком , поэтому не могу сказать, предоставляет ли он функцию или аргумент, сделает это для вас из коробки. Тем не менее, воспользовавшись аргументом ix для na.fill, вы можете написать простую функцию-обертку, которая обеспечивает желаемую функциональность. Возможно, что-то вроде этого:

f <- function(object, fill = 0, maxgap = Inf, ...) {
    rr <- rle(is.na(object))
    ii <- rep(rr$values == FALSE | rr$lengths > maxgap, rr$lengths)
    na.fill(object, fill, ix = ii)
}

f(x, 0, maxgap = 3)
## 2019-01-17 2019-01-18 2019-01-19 2019-01-20 2019-01-21 2019-01-22 2019-01-23 
##          1          0          0          0          5          6          7 
## 2019-01-24 2019-01-25 2019-01-26 2019-01-27 2019-01-28 2019-01-29 2019-01-30 
##          8          9         NA         NA         NA         NA         NA 
## 2019-01-31 2019-02-01 2019-02-02 2019-02-03 2019-02-04 2019-02-05 
##         NA         NA         17         18         19         20 
0
ответ дан Josh O'Brien 16 January 2019 в 16:22
поделиться

В зоопарке есть недокументированное и не экспортированное .fill_short_gaps, которое используется так:

zoo:::.fill_short_gaps(x, fill = numeric(length(x)), maxgap = 3)

, дающее:

2019-01-17 2019-01-18 2019-01-19 2019-01-20 2019-01-21 2019-01-22 2019-01-23 
         1          0          0          0          5          6          7 
2019-01-24 2019-01-25 2019-01-26 2019-01-27 2019-01-28 2019-01-29 2019-01-30 
         8          9         NA         NA         NA         NA         NA 
2019-01-31 2019-02-01 2019-02-02 2019-02-03 2019-02-04 2019-02-05 
        NA         NA         17         18         19         20 
0
ответ дан G. Grothendieck 16 January 2019 в 16:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: