12 #ifndef ROOT_R_TRDataFrame 
   13 #define ROOT_R_TRDataFrame 
  177       class TRDataFrame: 
public TObject {
 
  178          friend class TRInterface;
 
  179          friend SEXP Rcpp::wrap<TRDataFrame>(
const TRDataFrame &f);
 
  185             friend class TRDataFrame;
 
  192             Binding(Rcpp::DataFrame &_df, TString name): fName(name), fDf(_df) {}
 
  197             Binding(
const Binding &obj): fName(obj.fName), fDf(obj.fDf) {}
 
  202             template <
class T> Binding operator=(T var)
 
  204                Int_t size = fDf.size(), i = 0;
 
  205                Rcpp::CharacterVector names = fDf.attr(
"names");
 
  206                Bool_t found = 
false;
 
  208                   if (names[i] == fName.Data()) {
 
  214                if (found) fDf[fName.Data()] = var;
 
  217                      fDf = Rcpp::DataFrame::create(ROOT::R::Label[fName.Data()] = var);
 
  219                      Rcpp::List nDf(size + 1);
 
  220                      Rcpp::CharacterVector nnames(size + 1);
 
  221                      for (i = 0; i < size; i++) {
 
  223                         nnames[i] = names[i];
 
  226                      nnames[size] = fName.Data();
 
  227                      nDf.attr(
"class") = fDf.attr(
"class") ;
 
  228                      nDf.attr(
"row.names") = fDf.attr(
"row.names") ;
 
  229                      nDf.attr(
"names") = nnames ;
 
  239             Binding operator=(Binding obj)
 
  241                Int_t size = fDf.size(), i = 0;
 
  242                Rcpp::CharacterVector names = fDf.attr(
"names");
 
  243                Bool_t found = 
false;
 
  245                   if (names[i] == fName.Data()) {
 
  251                if (found) fDf[fName.Data()] = obj.fDf[obj.fName.Data()];
 
  253                   Rcpp::List nDf(size + 1);
 
  254                   Rcpp::CharacterVector nnames(size + 1);
 
  255                   for (i = 0; i < size; i++) {
 
  256                      nDf[i] = obj.fDf[i] ;
 
  257                      nnames[i] = names[i];
 
  259                   nDf[size] = obj.fDf[obj.fName.Data()];
 
  260                   nnames[size] = fName.Data();
 
  262                   nDf.attr(
"class") = obj.fDf.attr(
"class") ;
 
  263                   nDf.attr(
"row.names") = obj.fDf.attr(
"row.names") ;
 
  264                   nDf.attr(
"names") = nnames ;
 
  276             template <
class T> Binding &operator >>(T &var)
 
  278                var = Rcpp::as<T>(fDf[fName.Data()]);
 
  281             Binding operator >>(Binding var)
 
  283                var.fDf[var.fName.Data()] = fDf[fName.Data()];
 
  292             template <
class T> Binding &operator <<(T var)
 
  294                Int_t size = fDf.size(), i = 0;
 
  295                Rcpp::CharacterVector names = fDf.attr(
"names");
 
  296                Bool_t found = 
false;
 
  298                   if (names[i] == fName.Data()) {
 
  304                if (found) fDf[fName.Data()] = var;
 
  306                   Rcpp::List nDf(size + 1);
 
  307                   Rcpp::CharacterVector nnames(size + 1);
 
  308                   for (i = 0; i < size; i++) {
 
  310                      nnames[i] = names[i];
 
  313                   nnames[size] = fName.Data();
 
  315                   nDf.attr(
"class") = fDf.attr(
"class") ;
 
  316                   nDf.attr(
"row.names") = fDf.attr(
"row.names") ;
 
  317                   nDf.attr(
"names") = nnames ;
 
  322             template <
class T> 
operator T()
 
  324                return Rcpp::as<T>(fDf[fName.Data()]);
 
  326             template <
class T> 
operator T()
 const 
  328                return Rcpp::as<T>(fDf[fName.Data()]);
 
  333             Rcpp::DataFrame &fDf;
 
  344          TRDataFrame(SEXP obj)
 
  346             df = Rcpp::as<Rcpp::DataFrame>(obj);
 
  352          TRDataFrame(
const TRDataFrame &_df);
 
  357          TRDataFrame(
const Rcpp::DataFrame &_df): df(_df) {};
 
  361          Binding operator[](
const TString &name);
 
  363          TRDataFrame &operator=(TRDataFrame &obj)
 
  369          TRDataFrame &operator=(TRDataFrame obj)
 
  375          TRDataFrame &operator=(SEXP obj)
 
  377             df = Rcpp::as<Rcpp::DataFrame>(obj);
 
  386          operator SEXP()
 const 
  395          Int_t GetNcols() { 
return df.size(); }
 
  400          Int_t GetNrows() { 
return df.nrows(); }
 
  405          TVectorString GetColNames()
 
  407             Rcpp::CharacterVector names = df.attr(
"names");
 
  408             TVectorString rnames(GetNcols());
 
  409             for (Int_t i = 0; i < GetNcols(); i++) rnames[i] = names[i];
 
  418          template<
class T> TMatrixT<T> AsMatrix()
 
  420             TRFunctionImport asMatrix(
"as.matrix");
 
  421             return Rcpp::as<TMatrixT<T> >(asMatrix(df));
 
  428          void Print(
const Char_t *label = 
"")
 
  430             TRFunctionImport print(
"print");
 
  431             if (label && !label[0]) {
 
  438          ClassDef(TRDataFrame, 0)