当Rcpp中的data.frame作为R的参数传递时,如何访问它的因子级别?

Vas*_*iou 3 r rcpp

我在R中创建了以下带有因子fac1的 data.frame df1,并将其作为参数传递给Rcpp函数。所请求的任务是获取Rcpp函数中的所有因子水平并使用它们。

fac1 <- factor(x = sample(x = 1:5,size = 100,replace = T),labels =  paste0("D",1:5))
var1 <- sample(x = 1:20,size = 100,replace = T)
fac2 <- factor(x = sample(x = 1:12,size = 100,replace = T),labels =  paste0("M",1:12))
df1 <- data.frame(fac1,var1,fac2)
Run Code Online (Sandbox Code Playgroud)

Vas*_*iou 6

经过一番研究,我找到了一个解决方案,并与我分享。
所述Rf_isFactor检查是否data.frame列是一个因素或没有。相应的IntegerVector(tempVec)
levels属性返回因子水平。

cppFunction("void GetFactorLevels(DataFrame df1){
    CharacterVector varNames = df1.names();
    for(int i=0; i<df1.length();i++) {
        if(Rf_isFactor(df1[i])==1){
           IntegerVector tempVec=df1[i];
           CharacterVector factorLevels =tempVec.attr(\"levels\");
           Rcout<<varNames[i]<<\": \"<<factorLevels<<std::endl;
        }
   }
}")

> GetFactorLevels(df1)
fac1: "D1" "D2" "D3" "D4" "D5"
fac2: "M1" "M2" "M3" "M4" "M5" "M6" "M7" "M8" "M9" "M10" "M11" "M12"
Run Code Online (Sandbox Code Playgroud)