tags:

views:

174

answers:

1

I am trying to export biometric data from an analysis using the ROCR package. Here is the code that I've done so far:

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 .......

This results in several Slots. I would like to export the resulting values into a text file for Excel modification using:

write(pred, "filename")

However, when I try to write the file, I get an error stating:

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

Is there any way around this?

I'd appreciate any advice. Thank you!

Matt Peterson

+1  A: 

Check the class structure of the resulting S4 objects with str, extract the relevant variables to build a dataframe and use write.table/write.csv to export the results. For instance, for the prediction pred:

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")

and for performance perf:

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([email protected],
                        [email protected], 
                        [email protected]), 
             file="result_perf.csv")
rcs
That did the trick. I was missing the structure argument. Thank you very much!
Mattey Gee