Example #1
0
  public static REXPGenericVector createRDataFrame(ARCTable arctable) {

    REXP[] payload;
    String[] names;
    int columnBeginIndexWithoutRowNamesColumn = 0;

    REXPString rownamesREXPString = null;

    if (arctable.getColumnName(0).equals("row.names")) {
      rownamesREXPString = createREXPString(arctable, 0);

      payload = new REXP[arctable.getColumnCount() - 1];
      names = new String[arctable.getColumnCount() - 1];
      columnBeginIndexWithoutRowNamesColumn = 1;
    } else {
      String[] rn = new String[arctable.getRowCount()];
      for (int i = 0; i < rn.length; i++) {
        rn[i] = "" + (i + 1);
      }
      rownamesREXPString = new REXPString(rn);

      payload = new REXP[arctable.getColumnCount()];
      names = new String[arctable.getColumnCount()];
    }

    if (arctable.isColumnSelectorVisible()) {
      for (int j = 0;
          columnBeginIndexWithoutRowNamesColumn < arctable.getColumnCount();
          columnBeginIndexWithoutRowNamesColumn++, j++) {
        if (arctable.getColumnSelectorOption(columnBeginIndexWithoutRowNamesColumn).getObject()
            == DataImportPanel.ColumnType.NUMERIC) {
          payload[j] = createREXPDouble(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable
                .getColumnSelectorOption(columnBeginIndexWithoutRowNamesColumn)
                .getObject()
            == DataImportPanel.ColumnType.CHARACTER) {
          payload[j] = createREXPString(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable
                .getColumnSelectorOption(columnBeginIndexWithoutRowNamesColumn)
                .getObject()
            == DataImportPanel.ColumnType.FACTOR) {
          payload[j] = createREXPFactor(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable
                .getColumnSelectorOption(columnBeginIndexWithoutRowNamesColumn)
                .getObject()
            == DataImportPanel.ColumnType.DATE) {
          payload[j] = createDate(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable
                .getColumnSelectorOption(columnBeginIndexWithoutRowNamesColumn)
                .getObject()
            == DataImportPanel.ColumnType.POSIXCT) {
          payload[j] = createPOSIXct(arctable, columnBeginIndexWithoutRowNamesColumn);
        }
        names[j] = arctable.getColumnName(columnBeginIndexWithoutRowNamesColumn);
      }
    } else {
      for (int j = 0;
          columnBeginIndexWithoutRowNamesColumn < arctable.getColumnCount();
          columnBeginIndexWithoutRowNamesColumn++, j++) {
        if (arctable.getColumnClass(columnBeginIndexWithoutRowNamesColumn) == REXPDouble.class
            || arctable.getColumnClass(columnBeginIndexWithoutRowNamesColumn)
                == REXPInteger.class) {
          payload[j] = createREXPDouble(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable.getColumnClass(columnBeginIndexWithoutRowNamesColumn) == String.class) {
          payload[j] = createREXPString(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable.getColumnClass(columnBeginIndexWithoutRowNamesColumn)
            == REXPFactor.class) {
          payload[j] = createREXPFactor(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable.getColumnClass(columnBeginIndexWithoutRowNamesColumn) == RDate.class) {
          payload[j] = createDate(arctable, columnBeginIndexWithoutRowNamesColumn);
        } else if (arctable.getColumnClass(columnBeginIndexWithoutRowNamesColumn)
            == RPOSIXct.class) {
          payload[j] = createPOSIXct(arctable, columnBeginIndexWithoutRowNamesColumn);
        }
        names[j] = arctable.getColumnName(columnBeginIndexWithoutRowNamesColumn);
      }
    }

    System.gc();
    REXPString namesREXPString = new REXPString(names);
    REXPString classREXPString = new REXPString("data.frame");
    REXPList attr;

    if (rownamesREXPString == null) {
      attr =
          new REXPList(
              new RList(
                  new REXP[] {namesREXPString, classREXPString}, new String[] {"names", "class"}));
    } else {
      attr =
          new REXPList(
              new RList(
                  new REXP[] {namesREXPString, classREXPString, rownamesREXPString},
                  new String[] {"names", "class", "row.names"}));
    }

    return new REXPGenericVector(new RList(payload, names), attr);
  }