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

如何在R中生成向量所有含算术运算的组合(含括号分组)

在R中生成变量的所有算术运算排列组合(含括号分组)

核心需求

我需要在R中实现对变量的全量算术运算排列组合生成,用于手动机器学习筛选最优变量组合划分数据集,也可直接用于线性模型建模。具体要求包括:

1. 基础运算组合

针对输入变量,生成所有单个变量、以及变量间两两加减乘除的组合(含交换顺序的情况,比如cat-dog和dog-cat)。示例如下:

testvector <- c("cat", "dog")

# 预期输出
c("cat","dog","cat+dog","cat-dog","dog-cat","cat*dog","cat/dog","dog/cat")

我有大约10个变量,手动编写所有组合完全不现实,此前在Python中找到过类似实现方案,但需要在R中完成。

2. 支持括号分组运算

除基础运算外,还需要支持带括号的分组运算,生成类似如下的表达式:

# 输入示例
testvector <- c("cat","dog","bird")

# 预期输出示例(仅展示部分有效组合)
c("(cat-dog)/bird","(bird+cat)/dog","(dog+bird)*cat")

另外,如果针对数值型向量提前计算运算结果,再将结果用于建模也是可行的方案。

现有代码及待优化点

我已经编写了初步代码,但存在两个关键问题需要优化:

  • 问题a:无法适配任意长度的testvector,每次新增变量都需要手动调整公式结构
  • 问题b:生成了大量无意义的表达式(比如dog)、(dog+dog)+dog)这类带多余括号的无效内容),虽然后者可以通过循环过滤无效数值来处理,但优先级相对较低

现有代码如下:

testvector <- c("dog","cat","bird")

testvector <- c(paste0(testvector,")"), paste0("(",testvector), testvector)

c(testvector, do.call(paste, c(subset(expand.grid(testvector 
                                                  ,c("+", "-", "*", "/")
                                                  , testvector
                                                  ,c("+", "-", "*", "/")
                                                  , testvector)
                                      ), sep = "")))

# 输出头部内容:
[1] "dog)"             "cat)"             "bird)"            "(dog"             "(cat"            
   [6] "(bird"            "dog"              "cat"              "bird"             "cat)+dog)+dog)"  
  [11] "bird)+dog)+dog)"  "(dog+dog)+dog)"   "(cat+dog)+dog)"   "(bird+dog)+dog)"  "dog+dog)+dog)"   
  [16] "cat+dog)+dog)"    "bird+dog)+dog)"   "cat)-dog)+dog)"   "bird)-dog)+dog)"  "(dog-dog)+dog)"  
  [21] "(cat-dog)+dog)"   "(bird-dog)+dog)"  "dog-dog)+dog)"    "cat-dog)+dog)"    "bird-dog)+dog)"  
  [26] "cat)*dog)+dog)"   "bird)*dog)+dog)"  "(dog*dog)+dog)"   "(cat*dog)+dog)"   "(bird*dog)+dog)" 
  [31] "dog*dog)+dog)"    "cat*dog)+dog)"    "bird*dog)+dog)"   "cat)/dog)+dog)"   "bird)/dog)+dog)" 

额外需求

除了实现上述运算组合生成功能,我也愿意尝试能直接完成「寻找最优变量组合建模」的机器学习包,或者更直接用于线性模型的替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:10:02