There are many ways to read in data with R and Tidyverse depending on the type of data
Setting specific characters to NA is done by providing a character string to na input
read_tsv(file_path, na = ".")
Forcing the data type for a column is often necessary but instead of defining all columns you can define just those you need to force
read_tsv(file_path, col_types = cols(.default = "?", cDNA_position = "c", CDS_position = "c", Protein_position = "c"))