Révision 1771
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/RWorkspace.java (revision 1771) | ||
---|---|---|
460 | 460 |
* @throws REXPMismatchException the rEXP mismatch exception |
461 | 461 |
* @throws StatException the stat exception |
462 | 462 |
*/ |
463 |
public void plot(File file, String expr)throws REXPMismatchException, |
|
464 |
StatException { |
|
465 |
plot(file, expr, "svg"); |
|
463 |
public File plot(File file, String expr) throws REXPMismatchException, StatException, RserveException { |
|
464 |
return plot(file, expr, "svg"); |
|
466 | 465 |
} |
467 | 466 |
/** |
468 | 467 |
* Plot. |
... | ... | |
472 | 471 |
* @param device the device (svg, png, jpeg, ...) |
473 | 472 |
* @throws REXPMismatchException the rEXP mismatch exception |
474 | 473 |
* @throws StatException the stat exception |
474 |
* @throws RserveException |
|
475 | 475 |
*/ |
476 |
public void plot(File file, String expr, String devicename)throws REXPMismatchException, |
|
477 |
StatException |
|
478 |
{ |
|
476 |
public File plot(File file, String expr, String devicename) throws REXPMismatchException, StatException, RserveException { |
|
477 |
|
|
479 | 478 |
try { |
480 | 479 |
file.createNewFile(); |
481 |
} catch (IOException e1) { |
|
482 |
org.txm.utils.logger.Log.printStackTrace(e1); |
|
483 |
return; |
|
484 |
} |
|
485 |
if (!file.canWrite()) { |
|
486 |
System.out.println(NLS.bind("{0} cannot be written.", file)); //$NON-NLS-1$ |
|
487 |
} |
|
488 |
|
|
489 |
String name; |
|
490 |
if (OSDetector.isFamilyWindows()) { //$NON-NLS-1$ //$NON-NLS-2$ |
|
491 |
try { |
|
480 |
|
|
481 |
if (!file.canWrite()) { |
|
482 |
System.out.println(NLS.bind("{0} cannot be written.", file)); //$NON-NLS-1$ |
|
483 |
return null; |
|
484 |
} |
|
485 |
|
|
486 |
String name; |
|
487 |
if (OSDetector.isFamilyWindows()) { //$NON-NLS-1$ //$NON-NLS-2$ |
|
492 | 488 |
name = file.getCanonicalPath().replaceAll("/", "\\"); |
493 |
} catch (IOException e) { |
|
494 |
throw new StatException(e); |
|
495 | 489 |
} |
496 |
} else {
|
|
497 |
name = file.getAbsolutePath(); |
|
498 |
} |
|
490 |
else {
|
|
491 |
name = file.getAbsolutePath();
|
|
492 |
}
|
|
499 | 493 |
|
500 |
if (devicename.equals("devSVG")) voidEval("library(RSvgDevice);");
|
|
494 |
if (devicename.equals("devSVG")) safeEval("library(RSvgDevice);");
|
|
501 | 495 |
|
502 |
// FIXME : test for window dimensions so the large plots can be entirely displayed. Need to pass width and height to RWorkspace.plot() so |
|
503 |
// RChartsEngine will be able to dynamically compute the width from the number of bars in a barplot for example. |
|
504 |
//REXP xp = eval("try("+devicename+"(\"" + name + "\", width=20, height=10))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
|
496 |
// FIXME : test for window dimensions so the large plots can be entirely displayed. Need to pass width and height to RWorkspace.plot() so
|
|
497 |
// RChartsEngine will be able to dynamically compute the width from the number of bars in a barplot for example.
|
|
498 |
//REXP xp = eval("try("+devicename+"(\"" + name + "\", width=20, height=10))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
|
505 | 499 |
|
506 |
REXP xp = eval("try("+devicename+"(\"" + name + "\"))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
|
500 |
REXP xp = eval("try("+devicename+"(\"" + name + "\"))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
|
507 | 501 |
|
508 |
if (xp.isString() && xp.asString() != null) { // if there's a string |
|
509 |
// then we have a |
|
510 |
// problem, R sent an |
|
511 |
// error |
|
512 |
// System.out.println("Can't open svg graphics device:\n"+xp.asString()); |
|
513 |
// this is analogous to 'warnings', but for us it's sufficient to |
|
514 |
// get just the 1st warning |
|
515 |
REXP w = eval("if (exists(\"last.warning\") && length(last.warning)>0) names(last.warning)[1] else 0"); //$NON-NLS-1$ |
|
516 |
// if (w.asString()!=null) System.out.println(w.asString()); |
|
517 |
throw new StatException(w.asString()); |
|
502 |
if (xp.isString() && xp.asString() != null) { // if there's a string |
|
503 |
// then we have a |
|
504 |
// problem, R sent an |
|
505 |
// error |
|
506 |
// System.out.println("Can't open svg graphics device:\n"+xp.asString()); |
|
507 |
// this is analogous to 'warnings', but for us it's sufficient to |
|
508 |
// get just the 1st warning |
|
509 |
REXP w = eval("if (exists(\"last.warning\") && length(last.warning)>0) names(last.warning)[1] else 0"); //$NON-NLS-1$ |
|
510 |
// if (w.asString()!=null) System.out.println(w.asString()); |
|
511 |
throw new StatException(w.asString()); |
|
512 |
} |
|
513 |
|
|
514 |
// ok, so the device should be fine - let's plot |
|
515 |
safeEval(expr); |
|
516 |
safeEval("dev.off()"); //$NON-NLS-1$ |
|
517 |
|
|
518 |
return file; |
|
518 | 519 |
} |
519 |
|
|
520 |
// ok, so the device should be fine - let's plot |
|
521 |
voidEval(expr); |
|
522 |
voidEval("dev.off()"); //$NON-NLS-1$ |
|
520 |
catch (Exception e) { |
|
521 |
// TODO Auto-generated catch block |
|
522 |
e.printStackTrace(); |
|
523 |
return null; |
|
524 |
} |
|
523 | 525 |
} |
524 | 526 |
|
525 | 527 |
/** |
Formats disponibles : Unified diff