如何在 RCpp 中向数据框添加新列?
How can I add a new column to dataframe in RCpp?
我正在尝试使用 RCpp 向数据框添加新列。
在下面的代码中,我打算向数据框 df 添加一个 "result" 列。但是数据集在 运行 代码之后没有 "result" 列。你能告诉我他们有什么问题吗?
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;
}
你不能通过引用来做。但是如果你 return 数据框它工作:
#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")
*/
请注意,我冒昧地稍微简化了计算。结果:
> set.seed(42)
> df <- data.frame(x = runif(10), y = runif(10))
> AddNewCol( df ,"result")
x y result
1 0.9148060 0.4577418 0.191677054
2 0.9370754 0.7191123 0.484582715
3 0.2861395 0.9346722 0.249974991
4 0.8304476 0.2554288 0.054181629
5 0.6417455 0.4622928 0.137150421
6 0.5190959 0.9400145 0.458687354
7 0.7365883 0.9782264 0.704861206
8 0.1346666 0.1174874 0.001858841
9 0.6569923 0.4749971 0.148232064
10 0.7050648 0.5603327 0.221371155
我正在尝试使用 RCpp 向数据框添加新列。
在下面的代码中,我打算向数据框 df 添加一个 "result" 列。但是数据集在 运行 代码之后没有 "result" 列。你能告诉我他们有什么问题吗?
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;
}
你不能通过引用来做。但是如果你 return 数据框它工作:
#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")
*/
请注意,我冒昧地稍微简化了计算。结果:
> set.seed(42)
> df <- data.frame(x = runif(10), y = runif(10))
> AddNewCol( df ,"result")
x y result
1 0.9148060 0.4577418 0.191677054
2 0.9370754 0.7191123 0.484582715
3 0.2861395 0.9346722 0.249974991
4 0.8304476 0.2554288 0.054181629
5 0.6417455 0.4622928 0.137150421
6 0.5190959 0.9400145 0.458687354
7 0.7365883 0.9782264 0.704861206
8 0.1346666 0.1174874 0.001858841
9 0.6569923 0.4749971 0.148232064
10 0.7050648 0.5603327 0.221371155