Please note that you may encounter this issue if the GTF files you are working with have some entries that have missing "transcript_id" or "gene_id" attributes, or if there are invalid values in these attributes.
As a workaround, you can reformat your GTF files to work with the "GTFAnnotation" function by adding an empty string as the "transcript_id" attribute to the invalid entries or an empty string as the "gene_id" attribute to the invalid entries.
To perform this workaround, please consider the following code snippet that demonstrates how to replace the "transcript_id" attribute with an empty string:
% GTF file names
originalFile = "myfile.gtf";
fixedEmptyTranscriptIdEntriesFile = "myfile_fixed.gtf";
% Read in GTF file (skip last empty line)
gtfLines = readlines(originalFile, EmptyLineRule="skip");
% Find entries that do not contain "transcript_id" attribute (exclude header)
invalidEntryIdx = ~contains(gtfLines, ("transcript_id" | textBoundary + "#"));
% Add empty "transcript_id" attribute to the invalid entries
gtfLines(invalidEntryIdx) = gtfLines(invalidEntryIdx) + ' transcript_id "";';
% Write to a new GTF file that has the invalid entries fixed
writelines(gtfLines, fixedEmptyTranscriptIdEntriesFile);
GTFAnnotationObject = GTFAnnotation(fixedEmptyTranscriptIdEntriesFile);