我在用 !!!(拼接运算符/大爆炸运算符)用于 ggplot2::geom_point() 函数,并且失败。有人能指出这段代码有什么问题吗?以下代码尝试从字符向量执行 ggplot2 函数。
library(rlang)
library(ggplot2)
data(mtcars)
data = mtcars
assoc = c( "cyl" , "hp" )
names(assoc) = c("x", "y")
assoc_lang = rlang::parse_exprs(assoc)
gg = ggplot2::ggplot(data, ggplot2::aes( ,, !!! assoc_lang )) # This works
params = c( "10", "\"black\"" )
names(params) = c("size", "colour" )
params_lang = rlang::parse_exprs(params)
gg = gg + ggplot2::geom_point( !!! params_lang ) # This fails
plot(gg)
Run Code Online (Sandbox Code Playgroud)
Error in !params_lang : invalid argument type
Calls: <Anonymous> -> layer
Execution halted
Run Code Online (Sandbox Code Playgroud)
(注意)以下代码是交互式方式的等效代码,它显示了我想要在上面的代码中执行的操作。
library(ggplot2)
data(mtcars) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用RCpp向数据框添加新列.
在以下代码中,我打算向dataframe,df添加"result"列.但是运行代码后数据集没有"结果"列.你能告诉我他们有什么问题吗?
R文件调用AddNewCol()函数.
library(Rcpp)
sourceCpp('AddNewCol.cpp')
AddNewCol( df ,"result")
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud) 以我的理解,在Rcpp和C ++之间转换向量将创建新向量,如下所示。我的理解正确吗?
将Rcpp向量转换为C ++向量时,我们使用Rcpp::as<T>()(例如Rcpp::as<std::string>用于Rcpp::CharacterVector)。
std::vector<std::string>创建后,原始Rcpp元素将被复制到C ++向量中std::string。这意味着修改新创建的C ++矢量元素不会影响原始的Rcpp矢量元素。
将C ++向量转换为Rcpp向量时,我们使用Rcpp::wrap()。创建具有相应类型的Rcpp向量,并将C ++元素作为Rcpp对象复制到Rcpp向量中。这意味着修改新创建的Rcpp矢量元素不会影响原始的C ++矢量元素。
我正在实现一个在C中将字符串转换为double的函数。该函数不是破坏性的,即,我不修改传递的字符串,而只是在函数中读取它。我想将char *,const char *以及字符串文字传递给函数。
以下功能是否适合此目的?我认为问题在于是否在C中定义了并允许将char *传递给const char *。
double str2double( const char* input);
Run Code Online (Sandbox Code Playgroud)
谢谢。(我找到了一些类似的问题标题,但他们的答案对我来说很模糊,我在这里问。)