Don't use the subset function, the normal subsetting is much more readable. I am having problems determining the structure of your data please post head(seqkeep) and aligndf, so we can see the column names. You possibly want something like:
aligndf[ ,!(colnames(aligndf) %in% seqkeep)]
Edit: changed to column selection, it is unlcear what your goal is here.
or even simpler
aligndf[,seqkeep] # if rownames are compatible with
# seqkeep and all seqkeep are in rownames
extracting in R is normally very straight forward to code and read
see ?match ?extract ?Comparison
In my R build the following is less readable but slightly faster than %in%:
aligndf[,!match(aligndf, seqkeep, nomatch=0)] # if you need to do that often
you can further speed this up using package fastmatch
Also, we are moving far away from bioinformatics here.
subset(aligndf, aligndf =! seqkeep) # what's wrong?
Also subset works on rows, not columns by default.
You are trying to extract the column aligndf from aligndf and trying to comparing it to a smaller vector using the non-exiting operator =!. You meant !=, but comparison is not the same as set operation, and == or != are not the right operators. It is just coincidence that it didn't throw an error in the first place.
?subset
Warning
This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like [, and in particular the non-standard evaluation of argument subset can have unanticipated consequences.