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