text: user9007: Goal: To ensure "the sum of the counts for [my samples] is the same as the counts in the [samples] columns in ddsColl" after collapsing replicates using DESeq2.
  Before performing differential expression (DE) analysis on my RNA-seq data stored in a DESeqDataSet object, I need to collapse the read counts observed for each of my technical replicates. This should be simple enough using the DESeq2 manual and vignettes available as reference.
  This is how you collapse replicates:
  ddsColl <- collapseReplicates(dds, dds$sample, dds$run)
  # examine the colData of the collapsed data
  colData(ddsColl)
  # check that the sum of the counts for "sample1" is the same
  # as the counts in the "sample1" column in ddsColl
  matchFirstLevel <- dds$sample == levels(dds$sample)[1]
  stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
  
  However, when I try this, I get the following error with no apparent resolution reported in the manual or on online forums:
  Error: all(rowSums(counts(dds[, matchFirstLevel])) == counts(ddsColl[,  .... is not TRUE
  
  How might I circumvent this error and continue on with the analysis?
  
  Input files:
  > head(cts)
              KO1_P1_L001.Counts KO1_P1_L002.Counts KO1_P2_L001.Counts KO1_P2_L002.Counts KO1_P3_L001.Counts KO1_P3_L002.Counts KO2_P1_L001.Counts KO2_P1_L002.Counts KO2_P2_L001.Counts KO2_P2_L002.Counts KO2_P3_L001.Counts KO2_P3_L002.Counts WT_P1_L001.Counts WT_P1_L002.Counts WT_P2_L001.Counts WT_P2_L002.Counts WT_P3_L001.Counts WT_P3_L002.Counts
  DDX11L1                      1                  0                  1                  1                  2                  1                  0                  1                  2                  1                  3                  1                 7                 2                 1                 1                 0                 0
  WASH7P                     124                144                128                151                102                118                 39                 41                103                 87                105                106               125               120                13                26               104               136
  MIR6859-1                    8                  6                  4                  5                  4                  6                  2                  2                  7                  2                  7                  6                 6                 6                 2                 2                 2                 9
  MIR1302-2HG                  1                  4                  0                  0                  0                  2                  2                  2                  2                  2                  0                  4                 1                 2                 0                 3                 2                 2
  MIR1302-2                    0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                 0                 0                 0                 0                 0                 0
  FAM138A                      0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                 0                 0                 0                 0                 0                 0
  
  > print(coldata)
                     condition sample           run
  KO1_P1_L001.Counts    longKO     l1  long_P1_L001
  KO1_P1_L002.Counts    longKO     l1  long_P1_L002
  KO1_P2_L001.Counts    longKO     l2  long_P2_L001
  KO1_P2_L002.Counts    longKO     l2  long_P2_L002
  KO1_P3_L001.Counts    longKO     l3  long_P3_L001
  KO1_P3_L002.Counts    longKO     l3  long_P3_L002
  KO2_P1_L001.Counts   shortKO     s1 short_P1_L001
  KO2_P1_L002.Counts   shortKO     s1 short_P1_L002
  KO2_P2_L001.Counts   shortKO     s2 short_P2_L001
  KO2_P2_L002.Counts   shortKO     s2 short_P2_L002
  KO2_P3_L001.Counts   shortKO     s3 short_P3_L001
  KO2_P3_L002.Counts   shortKO     s3 short_P3_L002
  WT_P1_L001.Counts         WT     w1    wt_P1_L001
  WT_P1_L002.Counts         WT     w1    wt_P1_L002
  WT_P2_L001.Counts         WT     w2    wt_P2_L001
  WT_P2_L002.Counts         WT     w2    wt_P2_L002
  WT_P3_L001.Counts         WT     w3    wt_P3_L001
  WT_P3_L002.Counts         WT     w3    wt_P3_L002
  
  My workflow:
  > dds <- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design = ~ condition)
  > ddsColl <- collapseReplicates(dds, dds$sample, dds$run)
  > colData(ddsColl)
  DataFrame with 9 rows and 4 columns
     condition      sample           run               runsCollapsed
      <factor> <character>   <character>                 <character>
  l1    longKO          l1  long_P1_L001   long_P1_L001,long_P1_L002
  l2    longKO          l2  long_P2_L001   long_P2_L001,long_P2_L002
  l3    longKO          l3  long_P3_L001   long_P3_L001,long_P3_L002
  s1   shortKO          s1 short_P1_L001 short_P1_L001,short_P1_L002
  s2   shortKO          s2 short_P2_L001 short_P2_L001,short_P2_L002
  s3   shortKO          s3 short_P3_L001 short_P3_L001,short_P3_L002
  w1        WT          w1    wt_P1_L001       wt_P1_L001,wt_P1_L002
  w2        WT          w2    wt_P2_L001       wt_P2_L001,wt_P2_L002
  w3        WT          w3    wt_P3_L001       wt_P3_L001,wt_P3_L002
  
  > matchFirstLevel <- dds$sample == levels(dds$sample)[1]
  > matchFirstLevel
  logical(0)
  
  > stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
  Error: all(rowSums(counts(dds[, matchFirstLevel])) == counts(ddsColl[,  .... is not TRUE
  
  From the output of dds and ddsColl, it seems the number of columns decreased from 18 to 9, as expected. The only difference I see between my DESeq2 workflow output is the result of matchFirstLevel (see below for expected result). Why might this be for my dataset, but not the example dataset?
  Example workflow:
  > dds <- makeExampleDESeqDataSet(m=12)
  > dds$sample <- factor(sample(paste0("sample",rep(1:9, c(2,1,1,2,1,1,2,1,1)))))
  > dds$run <- paste0("run",1:12)
  > ddsColl <- collapseReplicates(dds, dds$sample, dds$run)
  > colData(ddsColl)
  DataFrame with 9 rows and 4 columns
          condition   sample         run runsCollapsed
           <factor> <factor> <character>   <character>
  sample1         B  sample1       run10   run10,run11
  sample2         A  sample2        run5          run5
  sample3         A  sample3        run6          run6
  sample4         A  sample4        run1     run1,run4
  sample5         B  sample5        run7          run7
  sample6         B  sample6        run9          run9
  sample7         A  sample7        run3    run3,run12
  sample8         B  sample8        run8          run8
  sample9         A  sample9        run2          run2
  
  > matchFirstLevel <- dds$sample == levels(dds$sample)[1]
  > matchFirstLevel
   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
  
  > stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
  
  
  user77: sample is a character vector, so levels(dds$sample) is returning null. Presumably you mean to use dds$sample[1] here instead, which will likely solve the problem.
  
original_text: 9007: <p><strong>Goal:</strong> To ensure &quot;the sum of the counts for [my samples] is the same as the counts in the [samples] columns in <code>ddsColl</code>&quot; after collapsing replicates using DESeq2.</p>
  <p>Before performing differential expression (DE) analysis on my RNA-seq data stored in a DESeqDataSet object, I need to collapse the read counts observed for each of my technical replicates. This should be simple enough using the DESeq2 <a href="https://bioconductor.org/packages/devel/bioc/manuals/DESeq2/man/DESeq2.pdf" rel="nofollow noreferrer">manual</a> and <a href="http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html" rel="nofollow noreferrer">vignettes</a> available as reference.</p>
  <p>This is how you collapse replicates:</p>
  <pre><code>ddsColl &lt;- collapseReplicates(dds, dds<span class="math-container">$sample, dds$</span>run)
  # examine the colData of the collapsed data
  colData(ddsColl)
  # check that the sum of the counts for &quot;sample1&quot; is the same
  # as the counts in the &quot;sample1&quot; column in ddsColl
  matchFirstLevel &lt;- dds<span class="math-container">$sample == levels(dds$</span>sample)[1]
  stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
  </code></pre>
  <p>However, when I try this, I get the following error with no apparent resolution reported in the manual or on online forums:</p>
  <pre><code>Error: all(rowSums(counts(dds[, matchFirstLevel])) == counts(ddsColl[,  .... is not TRUE
  </code></pre>
  <p><strong>How might I circumvent this error and continue on with the analysis?</strong></p>
  <hr />
  <p><strong>Input files:</strong></p>
  <pre><code>&gt; head(cts)
              KO1_P1_L001.Counts KO1_P1_L002.Counts KO1_P2_L001.Counts KO1_P2_L002.Counts KO1_P3_L001.Counts KO1_P3_L002.Counts KO2_P1_L001.Counts KO2_P1_L002.Counts KO2_P2_L001.Counts KO2_P2_L002.Counts KO2_P3_L001.Counts KO2_P3_L002.Counts WT_P1_L001.Counts WT_P1_L002.Counts WT_P2_L001.Counts WT_P2_L002.Counts WT_P3_L001.Counts WT_P3_L002.Counts
  DDX11L1                      1                  0                  1                  1                  2                  1                  0                  1                  2                  1                  3                  1                 7                 2                 1                 1                 0                 0
  WASH7P                     124                144                128                151                102                118                 39                 41                103                 87                105                106               125               120                13                26               104               136
  MIR6859-1                    8                  6                  4                  5                  4                  6                  2                  2                  7                  2                  7                  6                 6                 6                 2                 2                 2                 9
  MIR1302-2HG                  1                  4                  0                  0                  0                  2                  2                  2                  2                  2                  0                  4                 1                 2                 0                 3                 2                 2
  MIR1302-2                    0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                 0                 0                 0                 0                 0                 0
  FAM138A                      0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                 0                 0                 0                 0                 0                 0
  
  &gt; print(coldata)
                     condition sample           run
  KO1_P1_L001.Counts    longKO     l1  long_P1_L001
  KO1_P1_L002.Counts    longKO     l1  long_P1_L002
  KO1_P2_L001.Counts    longKO     l2  long_P2_L001
  KO1_P2_L002.Counts    longKO     l2  long_P2_L002
  KO1_P3_L001.Counts    longKO     l3  long_P3_L001
  KO1_P3_L002.Counts    longKO     l3  long_P3_L002
  KO2_P1_L001.Counts   shortKO     s1 short_P1_L001
  KO2_P1_L002.Counts   shortKO     s1 short_P1_L002
  KO2_P2_L001.Counts   shortKO     s2 short_P2_L001
  KO2_P2_L002.Counts   shortKO     s2 short_P2_L002
  KO2_P3_L001.Counts   shortKO     s3 short_P3_L001
  KO2_P3_L002.Counts   shortKO     s3 short_P3_L002
  WT_P1_L001.Counts         WT     w1    wt_P1_L001
  WT_P1_L002.Counts         WT     w1    wt_P1_L002
  WT_P2_L001.Counts         WT     w2    wt_P2_L001
  WT_P2_L002.Counts         WT     w2    wt_P2_L002
  WT_P3_L001.Counts         WT     w3    wt_P3_L001
  WT_P3_L002.Counts         WT     w3    wt_P3_L002
  </code></pre>
  <p><strong>My workflow:</strong></p>
  <pre><code>&gt; dds &lt;- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design = ~ condition)
  &gt; ddsColl &lt;- collapseReplicates(dds, dds<span class="math-container">$sample, dds$</span>run)
  &gt; colData(ddsColl)
  DataFrame with 9 rows and 4 columns
     condition      sample           run               runsCollapsed
      &lt;factor&gt; &lt;character&gt;   &lt;character&gt;                 &lt;character&gt;
  l1    longKO          l1  long_P1_L001   long_P1_L001,long_P1_L002
  l2    longKO          l2  long_P2_L001   long_P2_L001,long_P2_L002
  l3    longKO          l3  long_P3_L001   long_P3_L001,long_P3_L002
  s1   shortKO          s1 short_P1_L001 short_P1_L001,short_P1_L002
  s2   shortKO          s2 short_P2_L001 short_P2_L001,short_P2_L002
  s3   shortKO          s3 short_P3_L001 short_P3_L001,short_P3_L002
  w1        WT          w1    wt_P1_L001       wt_P1_L001,wt_P1_L002
  w2        WT          w2    wt_P2_L001       wt_P2_L001,wt_P2_L002
  w3        WT          w3    wt_P3_L001       wt_P3_L001,wt_P3_L002
  
  &gt; matchFirstLevel &lt;- dds<span class="math-container">$sample == levels(dds$</span>sample)[1]
  &gt; matchFirstLevel
  logical(0)
  
  &gt; stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
  Error: all(rowSums(counts(dds[, matchFirstLevel])) == counts(ddsColl[,  .... is not TRUE
  </code></pre>
  <p>From the output of <code>dds</code> and <code>ddsColl</code>, it seems the number of columns decreased from 18 to 9, as expected. The only difference I see between my DESeq2 workflow output is the result of <code>matchFirstLevel</code> (see below for expected result). Why might this be for my dataset, but not the example dataset?</p>
  <p><strong>Example workflow:</strong></p>
  <pre><code>&gt; dds &lt;- makeExampleDESeqDataSet(m=12)
  &gt; dds<span class="math-container">$sample &lt;- factor(sample(paste0("sample",rep(1:9, c(2,1,1,2,1,1,2,1,1)))))
  &gt; dds$</span>run &lt;- paste0(&quot;run&quot;,1:12)
  &gt; ddsColl &lt;- collapseReplicates(dds, dds<span class="math-container">$sample, dds$</span>run)
  &gt; colData(ddsColl)
  DataFrame with 9 rows and 4 columns
          condition   sample         run runsCollapsed
           &lt;factor&gt; &lt;factor&gt; &lt;character&gt;   &lt;character&gt;
  sample1         B  sample1       run10   run10,run11
  sample2         A  sample2        run5          run5
  sample3         A  sample3        run6          run6
  sample4         A  sample4        run1     run1,run4
  sample5         B  sample5        run7          run7
  sample6         B  sample6        run9          run9
  sample7         A  sample7        run3    run3,run12
  sample8         B  sample8        run8          run8
  sample9         A  sample9        run2          run2
  
  &gt; matchFirstLevel &lt;- dds<span class="math-container">$sample == levels(dds$</span>sample)[1]
  &gt; matchFirstLevel
   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
  
  &gt; stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
  </code></pre>
   77: <p><code>sample</code> is a character vector, so <code>levels(dds$sample)</code> is returning <code>null</code>. Presumably you mean to use <code>dds$sample[1]</code> here instead, which will likely solve the problem.</p>
  