我想用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)"