Hi,
First of all, missing data is something the regression model won't like 
- Get rid of all rows with missing data (that's going to be used)
- Fill in the missing values with estimates or from other sources
Ok, so now to run your different linear models. It's easier to get rid of the columns you won't need, as this will save time in the formula writing.
library("dplyr")
AAA = AAA %>% select(-stockcode, -date)
We can now write the linear model and make sure we filter for one year. Then remove the year column and use all the rest in the model:
myModel = lm(firmreturn ~., data = AAA %>% filter(year == "2016") %>% select(-year))
Rsquared = summary(myModel)$r.squared
To make it even easier, you can run all models for all years using an extra function:
You'll need to install the 'purrr' package first
finalResult = purrr::map_df(unique(AAA$year), function(modelYear){
myModel = lm(firmreturn ~., data = AAA %>% filter(year == modelYear) %>% select(-year))
data.frame(year = modelYear, RSquared = summary(myModel)$r.squared)
})
Hope this helps!
PJ