How can I extract normalized read count values from DESeq2 results? The results obtained by running the results command from DESeq2 contain a "baseMean" column, which I assume is the mean across samples of the normalized counts for a given gene.

How can I access the normalized counts proper?

I tried the following (continuing with the example used here):

&gt; dds &lt;- DESeqDataSetFromMatrix(countData = counts_data, colData = col_data, design = ~ geno_treat)
&gt; dds &lt;- DESeq(dds)
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
&gt; res &lt;- results(dds, contrast=c("geno_treat", "prg1_HS30", "prg1_RT"))


Here is what I have for the first gene:

&gt; res["WBGene00000001",]$baseMean
[1] 181.7862
&gt; mean(assays(dds)$mu["WBGene00000001",])
[1] 231.4634
&gt; mean(assays(dds)$counts["WBGene00000001",])
[1] 232.0833


assays(dds)$counts corresponds to the raw counts. assays(dds)$mu seems to be a transformation of these counts approximately preserving their mean, but this mean is very different from the "baseMean" value, so these are likely not the normalized values.
The normalized counts themselves can be accessed with counts(dds, normalized=T).

Now as to what the baseMean actually means, that will depend upon whether an "expanded model matrix" is in use or not. Given your previous question, we can see that geno_treat has a bunch of levels, which means that expanded models are not in use. In such cases, the baseMean should be the mean of the base factor in geno_treat.