创建列表中所有元素的组合

Create combination of all elements in a list

我正在创建一个需要用户输入输入变量的函数,然后该函数会创建这些输入参数的所有可能的组合(不同长度)。假设输入变量是“A”、“B”和“C”。

Combination # Input1 Input2 Input3
1 A B C
2 A B
3 A
4 B C
5 B
6 A C
7 C

我希望 R 形成 A、B 和 C 的所有可能组合并为其创建数据框。例如:

知道如何实现吗? 谢谢!

你可以试试

library(dplyr)

x <- c(TRUE,FALSE)

expand.grid(x,x,x) %>%
  filter(rowSums(.) != 0) %>%
  mutate(Var1 = ifelse(Var1, "A", ""),
         Var2 = ifelse(Var2, "B", ""),
         Var3 = ifelse(Var3, "C", "")) %>%
  tibble::rownames_to_column()

  rowname Var1 Var2 Var3
1       1    A    B    C
2       2         B    C
3       3    A         C
4       4              C
5       5    A    B     
6       6         B     
7       7    A          

函数

func <- function(input){
  n <- length(input)
  x <- c(TRUE,FALSE)
  
  y <- expand.grid(rep(list(x),n)) %>%
    filter(rowSums(.) != 0)
  
  for (i in 1:length(input)){
    y[,i] [y[,i]] <- input[i]
    y[,i][y[,i] != input[i]] <- ""
    
  }
  
  y %>%
    rownames_to_column()
}


inp <- c("A", "B", "C")
func(inp) 

  rowname Var1 Var2 Var3
1       1    A    B    C
2       2         B    C
3       3    A         C
4       4              C
5       5    A    B     
6       6         B     
7       7    A