我想用R中的所有算术函数对变量进行排列.

示例:

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

# expected outcome

c("cat","dog","cat+dog","cat-dog","dog-cat","cat*dog","cat/dog","dog/cat")

我有大约10个变量,所以这很难手工完成.我在Python中找到了一个响应,它可能可以做同样的事情,但我必须用R来做这件事.

(How to perform all possible combinations of arithmetic operations on 3 integers?)

我想用一种手动机器学习的方法来找到分离数据集的最佳变量组合.

如果ML包可以为我做到这一点,我也很乐意try 一下.

我也想在线性模型中使用这个向量的结果,但也许有一种更直接的方法.

还有一件事,我还想-如果可能的话-包括方括号来分组变量

# incomplete example

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

# expected outcome looks like

c("(cat-dog)/bird","(bird+cat)/dog","(dog+bird)*cat")

如果这不是用于字符向量,而是用于数值,我会预先计算必要的变量和排列,然后使用结果进行建模.

编辑:

我编辑了第一条 comments ,得出了这个结果(这是一个很好的开始),但如果 A)可以合并测试向量的长度,这样我就不必手动调整公式 B)是否可以删除"无意义的"元素.我认为后者并不重要,因为我可以将循环编程为跳过不会产生实数的元素.


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 = "")))

#head of output:

[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)" 


推荐答案

我们可以使用expand.grid来获得组合,然后使用paste来获得行

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

-输出

[1] "cat"     "dog"     "dog+cat" "dog-cat" "dog*cat" "dog/cat" "cat+dog" "cat-dog" "cat*dog" "cat/dog"

R相关问答推荐

编码变量a、b、c以匹配来自另一个数据点的变量x

如何将在HW上运行的R中的消息(错误、警告等)作为批处理任务输出

带有叠加饼图系列的Highmap

抖动点与嵌套类别变量箱形图的位置不对齐

如何在xyplot中 for each 面板打印R^2

我不能在docker中加载sf

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

在ggplot中为不同几何体使用不同的 colored颜色 比例

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

R中的时间序列(Ts)函数计数不正确

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

停止ggplot将多行减少到一行

将多个列合并为一个列的有效方法是什么?

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

如何用不同长度的向量填充列表?

将边列表转换为路径长度列表

使用列名和r中的前缀 Select 列的CREATE函数

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

根据向量对列表元素进行排序

如何将一列相关性转换为R中的相关性矩阵