style formatstyle extension data r data.table

formatstyle - render table shiny



¿Por qué demora más el tiempo en que data.table:: fread lea un archivo cuando el nombre de archivo se especifica de manera diferente? (1)

Estoy leyendo un archivo en R usando un fread usando los siguientes métodos:

fread("file:///C:/Users/Desktop/ads.csv") fread("C:/Users/Desktop/ads.csv") # Just omitted "file:///"

He observado que el tiempo de ejecución es muy diferente:

microbenchmark( fread("file:///C:/Users/Desktop/ads.csv"), fread("C:/Users/Desktop/ads.csv") ) Unit: microseconds expr min lq mean median uq max neval cld fread("file:///C:/Users/Desktop/ads.csv") 5755.975 6027.4735 6696.7807 6235.3365 6506.652 41257.476 100 b fread("C:/Users/Desktop/ads.csv") 525.492 584.0215 673.7166 647.4745 727.703 1476.191 100 a

¿Por qué el tiempo de ejecución varía tanto? No hay una diferencia notable entre 2 variantes cuando estaba usando read.csv () aunque


Actualizar:

Se ha añadido lo siguiente a ?fread :

Cuando la input comienza con http: //, https: //, ftp: //, ftps: // o file: //, fread detecta y descarga el destino en un archivo temporal (en tempfile() ) antes de continuar. Lee el archivo como de costumbre. Las URLS seguras (ftps: // y https: //) se descargan con curl::curl_download ; Las rutas ftp: // y http: // se descargan con download.file y el method establecido para getOption("download.file.method") , y su configuración getOption("download.file.method") "auto" ; y file: // se descarga con download.file con method="internal" . NB: esto implica que para el archivo: //, incluso los archivos encontrados en la máquina actual se "descargarán" (es decir, se copiarán en papel) en un archivo temporal. Vea ?download.file para más detalles.

De la fuente de fread :

if (str6 == "ftp://" || str7 == "http://" || str7 == "file://") { method = if (str7 == "file://") "auto" else getOption("download.file.method", default = "auto") download.file(input, tmpFile, method = method, mode = "wb", quiet = !showProgress) }

Es decir, su archivo se está "descargando" en un archivo temporal, que debe consistir en copiar en profundidad el contenido del archivo en una ubicación temporal. file:// no está realmente diseñado para su uso en archivos locales , sino en archivos en una red que deben descargarse localmente antes de ser leído (IIUC; FWIW, esto es lo que utiliza el régimen de pruebas de fread para imitar la descarga de archivos mientras se prueba en CRAN, donde la descarga de archivos externos es imposible).

También me doy cuenta de que sus tiempos son del orden de microsegundos , lo que podría explicar la discrepancia en comparación con read.csv . Imagine read.csv tarda 1 segundo en leer el archivo, mientras que fread tarda .01 segundos; la copia de archivos tarda .05 segundos. Entonces, en ambos casos, read.csv se verá casi igual (1 vs 1.05 segundos), mientras que fread se fread sustancialmente más lento para el file:// caso (.01 vs. .06 segundos).