If I come across this kind of code when I'm checking (QCing) code it makes me want to punch the programmer's face. I find that it's impossible to step through and check each dataset with the previous incarnation. Which is how I check what has happened in between lines. (In this case the changes are trivial, but the principle applies). However when I discussed it with a colleague recently he said "No, I think this is cool. Your final dataset is still called 'data' and you can easily see what changes have been made between the input and the final version ready for analysis."
data <- read.csv("foo.csv")
data <- data[data$STUDY == 1234,]
data <- data[!is.na(data$VAR),]
data <- data[data$VAR > 0,]
So. Is this cool? Or really, really bad?