1 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
2 //
3 // DataFrame.cpp: Rcpp R/C++ interface class library -- DataFrame unit tests
4 //
5 // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois
6 //
7 // This file is part of Rcpp.
8 //
9 // Rcpp is free software: you can redistribute it and/or modify it
10 // under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // Rcpp is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with Rcpp.  If not, see <http://www.gnu.org/licenses/>.
21 
22 #include <Rcpp.h>
23 using namespace Rcpp ;
24 
25 // [[Rcpp::export]]
FromSEXP(SEXP x)26 DataFrame FromSEXP( SEXP x){
27     DataFrame df(x) ;
28     return df;
29 }
30 
31 // [[Rcpp::export]]
index_byName(DataFrame df,std::string s)32 SEXP index_byName( DataFrame df, std::string s ){
33     return df[s];
34 }
35 
36 // [[Rcpp::export]]
index_byPosition(DataFrame df,int i)37 SEXP index_byPosition( DataFrame df, int i ){
38     return df[i];
39 }
40 // [[Rcpp::export]]
string_element(DataFrame df)41 std::string string_element( DataFrame df ){
42     CharacterVector b = df[1];
43 	std::string s;
44 	s = b[1];
45 	return s;
46 }
47 
48 // [[Rcpp::export]]
createOne()49 DataFrame createOne(){
50     IntegerVector v = IntegerVector::create(1,2,3);
51 	return DataFrame::create(Named("a")=v);
52 }
53 
54 // [[Rcpp::export]]
createTwo()55 DataFrame createTwo(){
56     IntegerVector v = IntegerVector::create(1,2,3);
57 	std::vector<std::string> s(3);
58 	s[0] = "a";
59 	s[1] = "b";
60 	s[2] = "c";
61 	return DataFrame::create(Named("a")=v, Named("b")=s);
62 }
63 
64 // [[Rcpp::export]]
SlotProxy(S4 o,std::string yy)65 DataFrame SlotProxy( S4 o, std::string yy ){
66     return DataFrame( o.slot( yy ) ) ;
67 }
68 
69 // [[Rcpp::export]]
AttributeProxy(List o,std::string y)70 DataFrame AttributeProxy( List o, std::string y ){
71     return DataFrame( o.attr( y )) ;
72 }
73 
74 // [[Rcpp::export]]
createTwoStringsAsFactors()75 DataFrame createTwoStringsAsFactors(){
76     IntegerVector v = IntegerVector::create(1,2,3);
77 	std::vector<std::string> s(3);
78 	s[0] = "a";
79 	s[1] = "b";
80 	s[2] = "c";
81 	return DataFrame::create(
82 		_["a"] = v,
83 		_["b"] = s,
84 		_["stringsAsFactors"] = false );
85 }
86 
87 // [[Rcpp::export]]
DataFrame_nrow(DataFrame df)88 IntegerVector DataFrame_nrow( DataFrame df){
89     return IntegerVector::create(df.nrow(), df.rows()) ;
90 }
91 
92 
93 // [[Rcpp::export]]
DataFrame_ncol(DataFrame df)94 IntegerVector DataFrame_ncol( DataFrame df){
95     return IntegerVector::create(df.ncol(), df.cols());
96 }
97 
98 // [[Rcpp::export]]
DataFrame_PushBackNamed()99 DataFrame DataFrame_PushBackNamed(){
100     NumericVector u(2);
101     NumericVector v(2);
102     DataFrame df = DataFrame::create(_["u"] = u);
103     df.push_back(v, "v");
104     return df;
105 }
106 
107 // [[Rcpp::export]]
DataFrame_PushBackUnnamed()108 DataFrame DataFrame_PushBackUnnamed(){
109     NumericVector u(2);
110     NumericVector v(2);
111     DataFrame df = DataFrame::create(_["u"] = u);
112     df.push_back(v);
113     return df;
114 }
115 
116 // [[Rcpp::export]]
DataFrame_PushFrontNamed()117 DataFrame DataFrame_PushFrontNamed(){
118     NumericVector u(2);
119     NumericVector v(2);
120     DataFrame df = DataFrame::create(_["u"] = u);
121     df.push_front(v, "v");
122     return df;
123 }
124 
125 // [[Rcpp::export]]
DataFrame_PushFrontUnnamed()126 DataFrame DataFrame_PushFrontUnnamed(){
127     NumericVector u(2);
128     NumericVector v(2);
129     DataFrame df = DataFrame::create(_["u"] = u);
130     df.push_front(v);
131     return df;
132 }
133 
134 // [[Rcpp::export]]
DataFrame_PushFrontDataFrame()135 DataFrame DataFrame_PushFrontDataFrame(){
136   NumericVector u(2);
137   NumericVector v(2);
138   NumericVector w(2);
139   NumericVector x(2);
140 
141   DataFrame df1 = DataFrame::create(_["u"] = u, _["v"] = v);
142   DataFrame df2 = DataFrame::create(_["w"] = w, _["x"] = x);
143   df1.push_front(df2);
144   return df1;
145 }
146 
147 // [[Rcpp::export]]
DataFrame_PushBackDataFrame()148 DataFrame DataFrame_PushBackDataFrame(){
149   NumericVector u(2);
150   NumericVector v(2);
151   NumericVector w(2);
152   NumericVector x(2);
153 
154   DataFrame df1 = DataFrame::create(_["u"] = u, _["v"] = v);
155   DataFrame df2 = DataFrame::create(_["w"] = w, _["x"] = x);
156   df1.push_back(df2);
157   return df1;
158 }
159 
160 // [[Rcpp::export]]
DataFrame_PushWrongSize()161 DataFrame DataFrame_PushWrongSize(){
162   NumericVector u(2);
163   NumericVector v(3);
164 
165   DataFrame df1 = DataFrame::create(_["u"] = u);
166   df1.push_back(v);
167   return df1;
168 }
169 
170 // [[Rcpp::export]]
DataFrame_PushReplicateLength()171 DataFrame DataFrame_PushReplicateLength(){
172   NumericVector u(2);
173   NumericVector v(4);
174   NumericVector x(1);
175 
176   u[0] = 1;
177   x[0] = 2;
178 
179   DataFrame df1 = DataFrame::create(_["u"] = u);
180   df1.push_back(v, "v");
181   df1.push_back(x, "x");
182   return df1;
183 }
184 
185 // [[Rcpp::export]]
DataFrame_PushZeroLength()186 DataFrame DataFrame_PushZeroLength(){
187   NumericVector u(2);
188   NumericVector v(0);
189 
190 
191   DataFrame df1 = DataFrame::create(_["u"] = u);
192   df1.push_back(v);
193   return df1;
194 }
195