【问题标题】:R. Combinations of lettersR. 字母组合
【发布时间】:2013-10-25 14:56:04
【问题描述】:

我应该有这样的输出:

AAAA
AAAG
AAAC
AAAT
AAGA
AAGG
...

我想首先用数字来做这件事,将“A”表示为 1,将“G”表示为 2,等等......

1111
1112
...

然后将 1 转换为“A”等等。我找到了这个函数expand.grid,但这给了我一个包含 4 个变量(4 列)的数据框,每个变量代表一个数字。

你还有别的想法吗?

提前致谢。

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    编辑:我最初的答案错误地假设您已经拥有索引向量。要从头开始生成这些字母的所有可能组合的向量,请尝试以下操作:

    x <- expand.grid(rep(list(c('A', 'G', 'T', 'C')), 4))
    do.call(paste0, x)
    

    您可以使用chartr 来做到这一点。

    x <- c(1111, 1112, 1113, 1114, 1121)
    chartr('1234', 'AGCT', x)
    # [1] "AAAA" "AAAG" "AAAC" "AAAT" "AAGA"
    

    【讨论】:

    • 但我应该获得所有可能的组合:TTAT (4414)、AGAG (1212) 等等……
    • 哦,对不起。我看错了。我以为你已经有了索引向量。
    • 如果您仍然想使用chartr(尽管它不是最好的解决方案),您可以分两步完成:step1=expand.grid(l1=1:4,l2=1:4,l3=1:4,l4=1:4)result=chartr('1234','AGCT',paste0(step1[,1],step1[,2],step1[,3],step1[,4]))
    【解决方案2】:

    如果我理解正确,您可以获得所有组合,只有数字被分成不同的列。你想要你的输出在哪里?如果你想输出到一个文件,你可以不只是做这样的事情:

    sink(SOME_FILENAME)
    
    for(i in 1:nrow(YOUR_DATAFRAME))
    {
        for(j in 1:ncol(YOUR_DATAFRAME))
        {
            print(YOUR_DATAFRAME[i,j])
        }
    
        print("\n")
    }
    

    【讨论】:

      【解决方案3】:

      在意识到您只想要 AGCT 的 4 元素组合/排列的完整“甲板”(而不是将数字翻译成字母,我认为这将比 expand.grid 方法快得多。:

      levs <- paste0( gl(4, 4^3, 4^4, labels=c("A","G","C","T") ), 
                      gl(4, 4^2, 4^4, labels=c("A","G","C","T")),
                      gl(4, 4,   4^4, labels=c("A","G","C","T")), 
                      gl(4, 1,   4^4, labels=c("A","G","C","T")) )
      
      head(levs)
      [1] "AAAA" "AAAG" "AAAC" "AAAT" "AAGA" "AAGG"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2012-06-12
        • 2016-04-04
        相关资源
        最近更新 更多