我正在尝试使用RCpp向数据框添加新列。
在以下代码中,我打算在数据框df中添加“结果”列。但是运行代码后,数据集没有“结果”列。你能告诉我他们怎么了吗?
R文件以调用AddNewCol()函数。
library(Rcpp)
sourceCpp('AddNewCol.cpp')
AddNewCol( df ,"result")
AddNewCol.cpp
#include <Rcpp.h>
#include<math.h>
using namespace Rcpp;
// [[Rcpp::export]]
void AddNewCol(DataFrame& df, std::string new_var) {
int maxRow = df.nrows();
NumericVector vec_x = df["x"];
NumericVector vec_y = df["y"];
NumericVector resultvec = NumericVector(maxRow);
for( int i = 0 ; i < maxRow; i++ ){
resultvec[i] = vec_x[i] * pow( vec_y[i] , 2 );
}
df[new_var] = resultvec;
}
答案 0 :(得分:5)
您不能通过引用来做。但是,如果您返回数据框,它将起作用:
+ AccountsSpectWithMarkup.max: OK, passed 100 tests.
> Collected test data:
4% (-2147483648,2147483647)
2% (1,2147483647)
2% (-1,-1)
2% (-1,0)
1% (-1,-1128775662)
1% (501893471,-2147483648)
1% (0,0)
1% (1529964222,-1507103054)
1% (36753817,-2147483648)
1% (2147483647,535423354
请注意,我采取了一些自由措施来简化计算。结果:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
DataFrame AddNewCol(const DataFrame& df, std::string new_var) {
NumericVector vec_x = df["x"];
NumericVector vec_y = df["y"];
df[new_var] = vec_x * Rcpp::pow(vec_y, 2);
return df;
}
/*** R
set.seed(42)
df <- data.frame(x = runif(10), y = runif(10))
AddNewCol( df ,"result")
*/