blob: 836dca630d60e8e6e13a90792bf32a0a803cd4d3 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2009, 2017 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.rj.data;
/**
* An R object is of the type {@link RObject#TYPE_DATAFRAME vector}, if it is an R list object
* inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame} and compiling with the R rules for
* a data frame, especially its children are {@link RVector}s of the same length.
* <p>
* The methods {@link #getLength()}, {@link #getName(int)}, {@link #get(int)} and
* {@link #get(String)}, inherited by the RList interface, provides access to the columns using the
* uniform RList API. The methods {@link #getColumnCount()}, {@link #getColumnNames()},
* {@link #getColumn(int)} and {@link #getColumn(String)} are data frame specific methods with
* similar functionality with direct access to the data stores of the columns, bypassing the RVector
* objects.</p>
* <p>
* The row information of the data frame are accessible by {@link #getRowCount()} and
* {@link #getRowNames()}.</p>
*/
public interface RDataFrame extends RList, RObject {
/**
* Returns the number of columns of the data frame.
* <p>
* This method is synonymous to {@link #getColumnCount()}.</p>
*
* @return the number of columns
*/
@Override
long getLength();
/**
* Returns the names of the columns of the data frame.
* <p>
* This method is synonymous to {@link #getColumnNames()}.</p>
*
* @return the column names
*/
@Override
RCharacterStore getNames();
/**
* Returns the name of the specified column of the data frame.
*
* @param idx the index (zero-based) of the column
* @return the column name
* @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; column count
*/
@Override
String getName(long idx);
/**
* Returns the RVector object of the specified column of the data frame.
*
* @param idx the index (zero-based) of the column
* @return the column vector
* @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; column count
*/
@Override
RObject get(long idx);
/**
* Returns the RVector object of the column with the specified name of the data frame.
*
* @param name the name of the column
* @return the column vector or <code>null</code> (if no column with the specified name exists)
*/
@Override
RObject get(String name);
/**
* For a data frame this method always returns <code>null</code>.
*
* @return <code>null</code>
*/
@Override
RStore<?> getData();
/**
* Returns the number of columns of the data frame.
* <p>
* This method is synonymous to {@link #getLength()}.</p>
*
* @return the number of columns
*/
long getColumnCount();
/**
* Returns the names of the columns of the data frame.
* <p>
* This method is synonymous to {@link #getNames()}.</p>
*
* @return the column names
*/
public RCharacterStore getColumnNames();
// String getColumnName(int idx);
/**
* Returns the data store for the specified column of the data frame.
* <p>
* This method is equivalent to <code>get(idx).getData()</code>.</p>
* <p>
* Each column data store has the length of {@link #getRowCount()}.</p>
*
* @param idx the index (zero-based) of the column
* @return the data store of the column
* @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; column count
*/
public RStore<?> getColumn(int idx);
/**
* Returns the data store for the specified column of the data frame.
* <p>
* This method is equivalent to <code>get(idx).getData()</code>.</p>
* <p>
* Each column data store has the length of {@link #getRowCount()}.</p>
*
* @param idx the index (zero-based) of the column
* @return the data store of the column
* @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; column count
*/
public RStore<?> getColumn(long idx);
/**
* Returns the data store for the column with the specified name of the data frame.
* <p>
* This method is equivalent to <code>get(name).getData()</code> (with additional <code>null</code>
* check, if no column with that name exists).</p>
* <p>
* Each column data store has the length of {@link #getRowCount()}.</p>
*
* @param name the name of the column
* @return the data store of the column or <code>null</code> (if no column with the specified name exists)
*/
public RStore<?> getColumn(String name);
/**
* Returns the number of rows of the data frame.
* <p>
* Each data store of a column ({@link #getColumn(int)} has this length.
*
* @return the number of rows
*/
long getRowCount();
/**
* Returns the names of the rows of the data frame.
* <p>
* This method is equivalent to the R command <code>row.names(obj)</code>.</p>
*
* @return the row names
*/
RStore<?> getRowNames();
// void setColumn(int idx, RStore<?> column);
// void insertColumn(int idx, RStore<?> column);
// void removeColumn(int idx);
// void insertRow(int idx);
// void removeRow(int idx);
}