Rcpp::DataFrame - 查找列类型
Rcpp::DataFrame - find column type
在我能找到的所有Rcpp示例中,必须知道DataFrame列的类型,然后才能将列提取为向量,例如:
// construct the data.frame object
Rcpp::DataFrame DF = Rcpp::DataFrame(Dsexp);
// and access each column by name
Rcpp::IntegerVector a = DF["a"];
Rcpp::CharacterVector b = DF["b"];
Rcpp::DateVector c = DF["c"];
在 R 中,可以使用 sapply()
函数和 class
或 typeof
.
查找列类型
但是,我在Rcpp中找不到负责类型检查的外部API。有没有办法以编程方式查找列类型?
你对我来说意义不大。
您的示例在列的 names 上,这是有效的,也是有记录的。
但是你希望在 type 上选择小马和选择。好吧,我有一个坏消息要告诉你:C++ 通常没有自反性。所以我们需要提供额外的信息。为此,我们经常使用名称。这让我们回到之前的案例。
相信我:做得更好会很好。不过,我不确定我知道我们该怎么做。
感谢 Dirk 的评论,我在 RcppGallery 文章中找到了解决方案:
Dynamic Wrapping and Recursion with Rcpp
TYPEOF
和 Rf_isFactor
应该足以确定 DataFrame 的列类型。 Rinternals.h
定义以下类型,这些类型将由 TYPEOF
返回:
#define INTSXP 13 /* integer vectors */
#define REALSXP 14 /* real variables */
#define CPLXSXP 15 /* complex variables */
#define STRSXP 16 /* string vectors */
#define DOTSXP 17 /* dot-dot-dot object */
#define ANYSXP 18 /* make "any" args work. */
#define VECSXP 19 /* generic vectors */
...
在我能找到的所有Rcpp示例中,必须知道DataFrame列的类型,然后才能将列提取为向量,例如:
// construct the data.frame object
Rcpp::DataFrame DF = Rcpp::DataFrame(Dsexp);
// and access each column by name
Rcpp::IntegerVector a = DF["a"];
Rcpp::CharacterVector b = DF["b"];
Rcpp::DateVector c = DF["c"];
在 R 中,可以使用 sapply()
函数和 class
或 typeof
.
但是,我在Rcpp中找不到负责类型检查的外部API。有没有办法以编程方式查找列类型?
你对我来说意义不大。
您的示例在列的 names 上,这是有效的,也是有记录的。
但是你希望在 type 上选择小马和选择。好吧,我有一个坏消息要告诉你:C++ 通常没有自反性。所以我们需要提供额外的信息。为此,我们经常使用名称。这让我们回到之前的案例。
相信我:做得更好会很好。不过,我不确定我知道我们该怎么做。
感谢 Dirk 的评论,我在 RcppGallery 文章中找到了解决方案:
Dynamic Wrapping and Recursion with Rcpp
TYPEOF
和 Rf_isFactor
应该足以确定 DataFrame 的列类型。 Rinternals.h
定义以下类型,这些类型将由 TYPEOF
返回:
#define INTSXP 13 /* integer vectors */
#define REALSXP 14 /* real variables */
#define CPLXSXP 15 /* complex variables */
#define STRSXP 16 /* string vectors */
#define DOTSXP 17 /* dot-dot-dot object */
#define ANYSXP 18 /* make "any" args work. */
#define VECSXP 19 /* generic vectors */
...