在这个主题中,我试图在这里包括所有常见问题及其答案.我希望这对某人有用.
一般问题:如何r从n对象生成对象序列?
总共存在这类2^3=8问题.
[更新]
Josh O'Brien认为这8个问题与十二种方式有关.实际上,"不同"的问题以十二种方式包含在内,而"非独特"的问题则不包括在内.无论如何,将这里的8个问题与12倍的方式进行比较是很有趣的.请参阅注释以获取进一步的读数.
我试图找到一种方法来获得A,A,A,A,B,B,B,B,B的所有可能的唯一排列的R列表.
组合是最初被认为是获得解决方案的方法,因此组合答案.
我需要使用8个变量得到总和等于100的所有组合,这些变量可以通过10的递增步长从0到100取任何值.(即0,10,20 ...... 100)
以下脚本就是这样做但效率非常低,因为它创建了一个巨大的数据集,我想知道是否有人有更好的方法来做到这一点.
x <- expand.grid("ON" = seq (0,100,10),
"3M" = seq(0,100,10),
"6M" = seq(0,100,10),
"1Y" = seq(0,100,10),
"2Y" = seq(0,100,10),
"5Y" = seq(0,100,10),
"10Y" = seq(0,100,10),
"15Y" = seq(0,100,10))
x <- x[rowSums(x)==100,]
Run Code Online (Sandbox Code Playgroud)
编辑 -
回答StéphaneLaurent提出的问题
结果应该是这样的
ON 3M 6M 1Y 2Y 5Y 10Y 15Y
100 0 0 0 0 0 0 0
90 10 0 0 0 0 0 0
80 20 0 0 0 0 0 0
70 30 0 0 0 0 0 0
60 40 …Run Code Online (Sandbox Code Playgroud) 我有以下生成唯一排列的代码:
library(magrittr)
library(tictoc)
count_unique_perm <- function(l = NULL) {
lo <- combinat::permn(l)
do.call(rbind, lapply(lo, paste0, collapse = ""))[, 1] %>%
unique() %>%
length()
}
Run Code Online (Sandbox Code Playgroud)
它已经给出了正确的结果。通过此输入:
l1 <- c("R", "R", "R", "R", "R", "R", "R", "E", "K", "P") # 720
l2 <- c("R", "R", "R", "R", "R", "Q", "G", "K", "M", "S") # 30,240
Run Code Online (Sandbox Code Playgroud)
但它运行速度非常慢。
tic()
count_unique_perm(l = l1)
toc()
#118.155 sec elapsed
#107.793 sec elapsed for l2
Run Code Online (Sandbox Code Playgroud)
我怎样才能加快速度?