Добро пожаловать в StackOverflow. Мы можем изменить существующий пример в пакете RcppExamples (который может оказаться полезным, как и другие части документации R cpp), чтобы показать это.
По сути, мы просто переназначьте атрибут names
.
Код
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
List DataFrameExample(const DataFrame & DF) {
// access each column by name
IntegerVector a = DF["a"];
CharacterVector b = DF["b"];
DateVector c = DF["c"];
// do something
a[2] = 42;
b[1] = "foo";
c[0] = c[0] + 7; // move up a week
// create a new data frame
DataFrame NDF = DataFrame::create(Named("a")=a,
Named("b")=b,
Named("c")=c);
// and reassign names
NDF.attr("names") = CharacterVector::create("tic", "tac", "toe");
// and return old and new in list
return List::create(Named("origDataFrame") = DF,
Named("newDataFrame") = NDF);
}
/*** R
D <- data.frame(a=1:3,
b=LETTERS[1:3],
c=as.Date("2011-01-01")+0:2)
rl <- DataFrameExample(D)
print(rl)
*/
Demo
R> Rcpp::sourceCpp("~/git/stackoverflow/61616170/answer.cpp")
R> D <- data.frame(a=1:3,
+ b=LETTERS[1:3],
+ c=as.Date("2011-01-01")+0:2)
R> rl <- DataFrameExample(D)
R> print(rl)
$origDataFrame
a b c
1 1 A 2011-01-08
2 2 foo 2011-01-02
3 42 C 2011-01-03
$newDataFrame
tic tac toe
1 1 A 2011-01-08
2 2 foo 2011-01-02
3 42 C 2011-01-03
R>
Если вы закомментируете строку, вы получите старые имена.