SEXP structure_mutate( Proxy& call_proxy, const DataFrame& df, const CharacterVector& results_names, CharacterVector classes){ int n = call_proxy.nsubsets() ; List out(n) ; CharacterVector names(n) ; CharacterVector input_names = df.names() ; int ncolumns = df.size() ; int i=0 ; for( ; i<ncolumns; i++){ out[i] = call_proxy.get_variable(input_names[i]) ; SET_NAMED( out[i], 2 ); names[i] = input_names[i] ; } for( int k=0; i<n; k++ ){ String name = results_names[k] ; if( ! any( input_names.begin(), input_names.end(), name.get_sexp() ) ){ SEXP x = call_proxy.get_variable( name ) ; out[i] = x ; SET_NAMED( out[i], 2 ); names[i] = name ; i++ ; } } out.attr("class") = classes ; set_rownames( out, df.nrows() ) ; out.names() = names; return out ; }