write sirve seleccionar que para funcion data csv2 crear columnas attach r crash write.table

sirve - write.table function in r



Colapsar R cuando se llama a `write.table` en un conjunto de datos particular (2)

Este es un buen error reproducible y debe informarse a R-devel o utilizando bug.report() . FWIW en

> sessionInfo() R version 3.0.0 Patched (2013-04-03 r62485) Platform: x86_64-unknown-linux-gnu (64-bit)

Si en Linux configuro R con CFLAGS = "- g -O0", puedo

R -d gdb (gdb) break Rf_error (gdb) run

luego pega tus líneas arriba y termina en

> write.table(PROBLEM_DATA, file=path.expand("~/test.csv")) Breakpoint 1, Rf_error (format=0x7ffff7a8f0f0 "''%s'' must be called on a CHARSXP") at /home/mtmorgan/src/R-3-0-branch/src/main/errors.c:753 753 RCNTXT *c = R_GlobalContext; (gdb) up 3 #3 0x00007ffff1b9bfb3 in EncodeElement2 (x=0x31ccf50, indx=113, quote=TRUE, qmethod=TRUE, buff=0x7fffffffbdc0, cdec=46 ''.'') at /home/mtmorgan/src/R-3-0-branch/src/library/utils/src/io.c:938 938 p0 = translateChar(STRING_ELT(x, indx)); (gdb) call Rf_PrintValue(x) [1] "String1" "String2" "String3" "String4" "String5" "String6" [7] "String7" "String8" "String9" "String10" "String11" "String12" [13] "String13" "String14" "String15" (gdb) p indx $1 = 113

que muestra R tratando de imprimir el 114º elemento de los nombres de los factores: claramente las cosas han salido mal porque el factor tiene valores enteros más allá de la longitud de sus niveles.

Lo siguiente consistentemente bloquea mi sesión R.
Probado en dos máquinas, Ubuntu y Mac OS X con resultados similares en ambos.

Breve descripción:
Llamar a write.table en un data.frame con columna de factores de todos los NA''s.

El conjunto de datos original es bastante grande, y he logrado aislar la columna ofensiva y luego crear un vector similar, llamado PROBLEM_DATA continuación, que causa el mismo bloqueo.

Curiosamente, a veces R bloquea directamente, otras veces simplemente arroja el siguiente error:

Error in write.table(x, file, nrow(x), p, rnames, sep, eol, na, dec, as.integer(quote), : ''getCharCE'' must be called on a CHARSXP

¿Alguna idea sobre la causa del accidente o debería enviarse como un error?

Ofender datos y llamar:

PROBLEM_DATA <- structure(114:116, .Label = c("String1", "String2", "String3", "String4", "String5", "String6", "String7", "String8", "String9", "String10", "String11", "String12", "String13", "String14", "String15"), class = "factor") # This will cause a crash write.table(PROBLEM_DATA, file=path.expand("~/test.csv")) # This will also crash write.table(PROBLEM_DATA, file=path.expand("~/test.csv"), fileEncoding="UTF-8")

INFORMACIÓN DE LA SESIÓN DE CADA MÁQUINA

UBUNTU

R version 2.15.3 (2013-03-01) Platform: x86_64-pc-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=C LC_COLLATE=C [5] LC_MONETARY=C LC_MESSAGES=C LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=C LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] gdata_2.12.0 ggplot2_0.9.3 stringr_0.6.1 RMySQL_0.9-3 DBI_0.2-5 [6] data.table_1.8.8 loaded via a namespace (and not attached): [1] MASS_7.3-23 RColorBrewer_1.0-5 colorspace_1.2-0 dichromat_1.2-4 [5] digest_0.5.2 grid_2.15.3 gtable_0.1.1 gtools_2.7.0 [9] labeling_0.1 munsell_0.4 plyr_1.7.1 proto_0.3-9.2 [13] reshape2_1.2.1 scales_0.2.3 tools_2.15.3

Mac OS X

R version 2.15.3 (2013-03-01) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base


No es una respuesta, sino un largo comentario:

PROBLEM_DATA <- structure(c(1:5,114:116), .Label = c("String1", "String2", "String3",''string4'',''str5'',''str6'',''str7''),class=''factor'') Rgames> as.numeric(PROBLEM_DATA) [1] 1 2 3 4 5 114 115 116 Rgames> as.numeric(as.character(PROBLEM_DATA)) [1] NA NA NA NA NA NA NA NA Warning message: NAs introduced by coercion Rgames> levels(PROBLEM_DATA) [1] "String1" "String2" "String3" "string4" "str5" "str6" "str7" Rgames> write.table(PROBLEM_DATA, file=path.expand("~/ctest.csv")) Error in write.table(x, file, nrow(x), p, rnames, sep, eol, na, dec, as.integer(quote), : ''getCharCE'' must be called on a CHARSXP

ctest.csv contiene: (cada línea es una sola celda en lo que concierne a Excel)

x 1 "String1" 2 "String2" 3 "String3" 4 "string4" 5 "str5" 6

Entonces, puede ver que algo va mal cuando hay una ''brecha'' en la numeración subyacente de los niveles. Espero que esto proporcione una pista para alguien que entiende los factores mucho más que yo.