[R-pkg-devel] Checking package in Windows fails

Ben Engbers Ben@Engber@ @end|ng |rom Be-Log|c@|@n|
Mon Nov 15 17:15:14 CET 2021


Hi,

I have written a function which
- checks if the input is a raw-vector
- if the input is a file-descriptor, it converts the file-content to a 
raw-vector
- if the input is a URL, it converts the content to a raw vector
- if the input is a character-string, it is converted to a raw vector.

The URL-test relys on package pingr (line 17 in 'input_to_raw.R'). 
'is_online() tests if there is an internet-connection.
Line 18 tests if the URL is a valid URL. This test relys on the code in 
'Rex.R'. (I don't know why I have to explicitly include 'library("rex")' 
in the code since I have added rex to the Imports in the DESCRIPTION)

After incorporating this code in my package, the package passes all 
tests both under Linux as on Windows(10).

devtools::check_win_devel however returns with this error:

Error in curl::curl_fetch_memory(url, handle = h) :
   response reading failed

How can I solve this problem?

Ben

#' @title input_to_raw
#'
#' @return 'Raw' vector
#'
#' @param input Character vector length 1
#'
#' @description Convert \emph{input} to a length-1 character vector.
#'
#' @details If \emph{input} is a reference to a file, the number of bytes
#'     corresponding to the size is read. If it is an URL, the URL is 
read and converted to a 'Raw' vector.
#'     The function does not catch errors.
#'
#' @export

input_to_raw <- function(input) {
   type <- typeof(input)
   pi <- pingr::is_online()
   va <- grepl(re, input)
   switch (type,
           "raw"       = raw_input <- input,       # Raw
           "character" = {
             if (input == "") {                    # Empty input
               raw_input <- raw(0)
             } else if (file.exists(input)) {      # File on filesystem
               finfo <- file.info(input)
               toread <- file(input, "rb")
               raw_input <- readBin(toread, what = "raw", size = 1, n = 
finfo$size)
               close(toread)
             } else if (pi && va && (get_URL <- httr::GET(input))$status 
==200) {
               raw_input <- get_URL$content
             }
             else {                                # String
               raw_input <- charToRaw(input)
             }
           },
           default = stop("Unknown input-type, please report the type of 
the input."
          )
   )
   return(raw_input)
}

--------------

library("rex")

valid_chars <- rex::rex(except_some_of(".", "/", " ", "-"))

re <- rex::rex(
   start,
   # protocol identifier (optional) + //
   group(list("http", maybe("s")) %or% "ftp", "://"),
   # user:pass authentication (optional)
   maybe(non_spaces,
         maybe(":", zero_or_more(non_space)),
         "@"),
   #host name
   group(zero_or_more(valid_chars, zero_or_more("-")), 
one_or_more(valid_chars)),
   #domain name
   zero_or_more(".", zero_or_more(valid_chars, zero_or_more("-")), 
one_or_more(valid_chars)),
   #TLD identifier
   group(".", valid_chars %>% at_least(2)),
   # server port number (optional)
   maybe(":", digit %>% between(2, 5)),
   # resource path (optional)
   maybe("/", non_space %>% zero_or_more()),
   end
)



More information about the R-package-devel mailing list