ticks studio ggplot change r io gzip seek

studio - Buscar en una conexión gz es impredecible



change ticks ggplot (1)

Esto es solo una suposición educada: los pequeños saltos solo se manejan dentro del búfer descodificado, cuando busca más que el tamaño del búfer, solo realizará una búsqueda en bruto y luego intenta decodificar gzip en la mitad de un fragmento que conduce a un error de descodificación, esto lo más probable es un error dentro de la biblioteca R. Sugiero usar omisión en lugar de buscar, ya que la biblioteca subyacente no puede hacer nada más y no tendrá ningún impacto en el rendimiento.

Acabo de comprobar rfc1952 y rfc1951, en gzip puede conocer el tamaño completo del archivo antes de extraerlo simplemente leyendo el encabezado ''members'' y sumando todos los campos de ISIZE; sin embargo, no puede saber qué tan grande será un bloque desinflado sin decodificarlo (el tamaño de cada símbolo está en el diccionario), simplemente no puedes buscar una corriente gzip común.

Si realmente quieres buscar un gzip debes indexarlo de antemano.

dictzip es una biblioteca que agrega encabezados adicionales para permitir la búsqueda.

Tengo problemas para buscar archivos gz en R. Aquí hay un ejemplo:

set.seed(123) m=data.frame(z=runif(10000),x=rnorm(10000)) write.csv(m,"m.csv") system("gzip m.csv") file.info("m.csv.gz")$size [1] 195975

Eso crea m.csv.gz , que R dice que puede buscar, y la ayuda para seek parece estar de acuerdo:

gzf=gzfile("m.csv.gz") open(gzf,"rb") isSeekable(gzf) [1] TRUE

Ahora pequeños saltos, ida y vuelta, parecen funcionar, pero si intento un gran salto, me sale un error:

seek(gzf,10) [1] 10 seek(gzf,20) [1] 10 seek(gzf,10) [1] 20 seek(gzf,1000) [1] 100 Warning message: In seek.connection(gzf, 1000) : seek on a gzfile connection returned an internal error

Sin embargo, si reinicio la conexión y comienzo de nuevo, puedo obtener 1000 si lo hago en pasos de 100 bytes:

for(i in seq(100,1000,by=100)){seek(gzf,i)} seek(gzf,NA) [1] 1000

R tiene algunas palabras duras sobre el uso de seek en Windows: "El uso de ''seek'' en Windows no se recomienda". pero esto está en una caja de Linux (R 3.1.1, 32 bit). Código similar en python que usa la biblioteca gz funciona bien, buscando todo.

R 3.2.0 es un poco más informativo:

Warning messages: 1: In seek.connection(gzf, 1000) : invalid or incomplete compressed data 2: In seek.connection(gzf, 1000) : seek on a gzfile connection returned an internal error

Ideas? He enviado esto como un informe de error ahora.