In your first example using map_chr(), each operation returns a character vector of length 13, which is not a valid entry into a character vector. Only by catenating them or unlisting a list containing them (as you've done in the second example), can you get a character vector back.
What's the reason for using map() in the first place when it seems like you want rep(c("spades", "hearts", "clubs", "diamonds"), each = 13)? Or were you just casting about for an example?
It easier to answer question about a piece of code that doesn't work if you also include what you expect it to produce.
Just a guess but it looks like you want to produce 13 * 4 elements in your output, i.e. 52 the number of cards in deck.
But map and friends returns 1 output element for each element in the input so the map function you are using will return 4 elements in a list so you need an extra operation like this...
Casting about is certainly my usual MO. In this case, yes, I wanted a simple ex but think I outsmarted myself in the process. Thank you for the answer and for this terrific community site.