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); }