You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的cpp11包中推入命名值?含向量及字符串变量场景

cpp11 中向量命名元素处理及动态名称推入方案

1. 向向量推入命名值的方法

cpp11 里的向量(如 writable::integer_vec、writable::double_vec 等)的元素名称是作为向量的整体属性存在的,而非像列表那样可以在单个元素推入时直接绑定名称。常用实现方式有两种:

方式一:先推入元素,再统一设置名称

先向向量中添加元素,再通过 names() 方法为整个向量设置对应位置的名称:

#include "cpp11.hpp"
using namespace cpp11;

[[cpp11::register]]
writable::integer_vector create_named_vector() {
  writable::integer_vec vec;
  
  // 推入元素
  vec.push_back(1);
  vec.push_back(2);
  vec.push_back(3);
  
  // 为每个元素设置对应名称
  names(vec) = {"first", "second", "third"};
  
  return vec;
}

方式二:初始化时直接构建命名向量

如果元素和名称已知,可在初始化向量时通过命名参数直接构建:

writable::integer_vec vec = {
  {"first"_nm = 1},
  {"second"_nm = 2},
  {"third"_nm = 3}
};

2. 使用字符串变量作为名称的推入操作

无论是列表还是向量,都可以用 cpp11::nm() 函数将字符串变量转换为命名标识,实现动态名称绑定:

列表的动态名称推入

#include "cpp11.hpp"
using namespace cpp11;

[[cpp11::register]]
writable::list create_named_list() {
  writable::list lst;
  std::string dyn_name = "dynamic_element";
  
  // 用nm()包裹字符串变量,实现动态命名推入
  lst.push_back(nm(dyn_name) = 42);
  
  return lst;
}

向量的动态名称处理

对于向量,可维护一个名称向量,动态添加名称后统一绑定:

#include "cpp11.hpp"
using namespace cpp11;

[[cpp11::register]]
writable::double_vector create_dynamic_named_vec() {
  writable::double_vec vec;
  writable::character_vec vec_names;
  
  // 动态名称变量
  std::string name_a = "var_a";
  std::string name_b = "var_b";
  
  // 推入元素和对应名称
  vec.push_back(3.14);
  vec_names.push_back(name_a);
  
  vec.push_back(2.71);
  vec_names.push_back(name_b);
  
  // 绑定名称到向量
  names(vec) = vec_names;
  
  return vec;
}

如果是初始化时使用动态名称,也可直接结合 nm():

std::string dyn_name = "my_var";
writable::integer_vec vec = { nm(dyn_name) = 100 };

内容的提问来源于stack exchange,提问作者beerda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:42:47