R 实现元素排列与组合

R 实现元素排列与组合

实现组合(combination)可以使用combn(x,n),大多时候需要转置t(combn(x,n))x可以是向量或数字。

实现元素全排列(permutation)就自己参考一部分combn()函数写了一个permtx可以是向量或数字。

permt = function (x, m) {
  if (is.numeric(x) && length(x) == 1L && x > 0 && trunc(x) == x) x <- seq_len(x)
  y = data.frame('v1' = x)
  if (m == 1) return(y)
  for (i in 2:m) {
    y = as.data.frame(
      cbind(
        colname = rep(x, each=nrow(y)),
        y
      )
    )
    names(y)[names(y) == 'colname'] <- paste0("v",i)
  }
  y
}
#  一个萝卜一个坑。萝卜白菜仨个坑:
permt(c("a",'b'),3)
permt(c("1",'2'),3)
permt(2,3)