【问题标题】:How to return dataframe with columns being lists using Rcpp?如何使用 Rcpp 返回列是列表的数据框?
【发布时间】:2022-01-14 11:16:13
【问题描述】:

正如here 所述,数据框可以将列表作为列。我尝试在 Rcpp 中做同样的事情,但没有成功。

df = data.frame(a=seq(1,2))
df$b = list(seq(1,10), seq(11,20))
df

我相应的 Rcpp 示例将生成的数据帧转换为列表(即删除数据帧属性) - 无意中:

cppFunction('
DataFrame testme() {
    DataFrame df = DataFrame::create(Named("a") = seq(1, 2));
    df["b"] = List::create(seq(1,10), seq(11,20));
    return df;
}')
testme()

有什么想法吗?

【问题讨论】:

  • 我想我只会返回一个列表并在 R 中转换为 data.frame。我很少在 Rcpp 中使用DataFrame

标签: r list dataframe rcpp


【解决方案1】:

我找到了基于此post 的解决方法:

cppFunction('
DataFrame testme1() {
    DataFrame df = DataFrame::create(Named("a") = seq(1, 2));
    df["b"] = List::create(seq(1,10), seq(11,20));
    df.attr("class") = "data.frame";
    df.attr("row.names") = Rcpp::seq(1, 2);
    return df;
}')
testme1()

在将列表列添加到数据框后,我必须显式(重新)设置数据框属性。

【讨论】:

  • 好的,很高兴你被整理出来了。您的问题或多或少与该问题重复。
  • 我想直接创建一个带有列表列的数据框(不使用 std::vector 并首先创建一个列表),并想知道属性“数据框”被删除了。但是,我同意,这个问题几乎是重复的。
  • DataFrame 支持相当基本,从未扩展。如果你挖掘你会发现几个帖子(这里,在 rcpp-devel 列表中,...)基本上建议总是使用List,并且只在最后转换。如果您考虑一下,这很有意义,因为只有 List 不受约束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2019-07-17
  • 1970-01-01
相关资源
最近更新 更多