Pregunta

Estoy tratando de exportar los datos biométricos de un análisis utilizando el paquete ROCR. Aquí está el código que he hecho hasta ahora:

pred = performance(Matching.Score,Distribution)
perf = prediction(pred,"fnr", "fpr")

An object of class “performance”

Slot "x.name":

[1] "False positive rate"

Slot "y.name":

[1] "False negative rate"

Slot "alpha.name":

[1] "Cutoff"

Slot "x.values":

[[1]]

[1] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[15] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
  ......

Slot "y.values":

[[1]]

[1] 1.00000 0.99999 0.99998 0.99997 0.99996 0.99995
[15] 0.99986 0.99985 0.99984 0.99983 0.99982 0.99981
    ......

Slot "alpha.values":

[[1]]

[1]  Inf      1.0427800 1.0221150 1.0056240 1.0032630 0.9999599
[12] 0.9644779 0.9633058 0.9628996 0.9626501 0.9607665 0.9605930
    .......

Esto se traduce en varias ranuras. Me gustaría exportar los valores resultantes en un archivo de texto para la modificación de Excel usando:

write(pred, "filename")

Sin embargo, cuando trato de escribir el archivo, me sale un error que dice:

Error in cat(list(...), file, sep, fill, labels, append) : 
  argument 1 (type 'S4') cannot be handled by 'cat'

¿Hay alguna forma de evitar esto?

Te agradecería cualquier consejo. ¡Gracias!

Matt Peterson

¿Fue útil?

Solución

Comprobar la estructura de clases de las que resultan S4 objetos con str, extraer las variables relevantes para construir una trama de datos y utilizar write.table / write.csv para exportar los resultados. Por ejemplo, para la pred predicción:

R> library("ROCR")
R> data(ROCR.simple)
R> pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels)
R> perf <- performance(pred, "fnr", "fpr")
R> str(pred)
Formal class 'prediction' [package "ROCR"] with 11 slots
  ..@ predictions:List of 1
  .. ..$ : num [1:200] 0.613 0.364 0.432 0.14 0.385 ...
  ..@ labels     :List of 1
  .. ..$ : Ord.factor w/ 2 levels "0"<"1": 2 2 1 1 1 2 2 2 2 1 ...
  ..@ cutoffs    :List of 1
  .. ..$ : num [1:201] Inf 0.991 0.985 0.985 0.983 ...
  ..@ fp         :List of 1
  .. ..$ : num [1:201] 0 0 0 0 1 1 2 3 3 3 ...
  ..@ tp         :List of 1
  .. ..$ : num [1:201] 0 1 2 3 3 4 4 4 5 6 ...
  ..@ tn         :List of 1
  .. ..$ : num [1:201] 107 107 107 107 106 106 105 104 104 104 ...
  ..@ fn         :List of 1
  .. ..$ : num [1:201] 93 92 91 90 90 89 89 89 88 87 ...
  ..@ n.pos      :List of 1
  .. ..$ : int 93
  ..@ n.neg      :List of 1
  .. ..$ : int 107
  ..@ n.pos.pred :List of 1
  .. ..$ : num [1:201] 0 1 2 3 4 5 6 7 8 9 ...
  ..@ n.neg.pred :List of 1
  .. ..$ : num [1:201] 200 199 198 197 196 195 194 193 192 191 ...

R> write.csv(data.frame(fp=pred@fp, fn=pred@fn), file="result_pred.csv")

y para perf rendimiento:

R> str(perf)
Formal class 'performance' [package "ROCR"] with 6 slots
  ..@ x.name      : chr "False positive rate"
  ..@ y.name      : chr "False negative rate"
  ..@ alpha.name  : chr "Cutoff"
  ..@ x.values    :List of 1
  .. ..$ : num [1:201] 0 0 0 0 0.00935 ...
  ..@ y.values    :List of 1
  .. ..$ : num [1:201] 1 0.989 0.978 0.968 0.968 ...
  ..@ alpha.values:List of 1
  .. ..$ : num [1:201] Inf 0.991 0.985 0.985 0.983 ...

R> write.csv(data.frame(fpr=perf@x.values,
                        fnr=perf@y.values, 
                        alpha.values=perf@alpha.values), 
             file="result_perf.csv")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top