Tengo una línea de cadena, primero delimitado por la ficha y, a continuación, dentro de cada columna sub columnas están delimitados por ^A.
Alguien sabe cómo hacer que en R.

Yo incluso no dividir la línea ‘ficha’ en el primer paso, mi código es el siguiente y lo estoy usando Rscript a leer desde la entrada estándar stdin:

#!/usr/bin/Rscript

input = file('stdin', 'r')

while(length(row<-readLines(input, n=1))>0){
    fields = strsplit(row, '\t')
    key = fields[1]
    value = fields[2]
    write(length(fields), stdout())
}

Entonces puedo ejecutar mi código:

$ cat input | ./reducer.R 
1
1
1

y mi entrada se parece a este que es delimitado por tabulaciones:

1        2
3        4
5        6 

Simplemente no puedo entender por qué mi división declaración de no trabajo

InformationsquelleAutor B.Mr.W. | 2013-10-11

2 Comentarios

  1. 2

    Es difícil decir sin su entrada, pero probablemente te interese:

    key = fields[[1]][[1]]
    value = fields[[1]][[2]]

    Si lo anterior funciona, las posibilidades son entonces las siguientes:

    fields = strsplit(row, '\t') [[1]]
    key = fields[1]
    value = fields[2]

    strsplit devuelve una lista (ideal para vectorizados operaciones, pero un gotcha cuando no esperaba una lista de salida)

    • Esto funciona para mí, pero totalmente inesperado complejo sólo para una fracción.. y por supuesto, la comparación con Python
    • por favor, consulte la edición. Python sintaxis es ciertamente más fácil cuando la división de una sola cadena. Sin embargo, en R, usted ni siquiera necesita su tiempo de bucle. Usted puede lograr que todo el código en dos líneas. 😉
  2. 1

    Usted no necesita un bucle o strsplit() a todos:

    f <- read.delim(stdin(), sep="\t", header=FALSE)
    names(f) <- c("key", "value")

    f ahora es una estructura de datos que contiene dos columnas, su clave y valor.

    Si quieres escribir en algún lugar, el uso de write.table:

    write.table(f, stdout(), sep="\t", row.names=FALSE)

Dejar respuesta

Please enter your comment!
Please enter your name here