Okay, so you're looking to make models between the first column (the response) and each of the subsequent columns (predictors) in turn? I think the tidyverse tools might help us get this done more easily 
First, I'm gonna reshape the data so that every column other than the first is collapsed into a single column. Then, I'll nest the responses and gene expressions for each predictor group, so we'll have a data frame for each one. Finally, I'll run the regression for each group and extract the R-squared value.
suppressPackageStartupMessages(library(tidyverse))
#> Warning: package 'ggplot2' was built under R version 3.5.1
#> Warning: package 'dplyr' was built under R version 3.5.1
# tidy
tidy_data =
x1 %>%
as_data_frame() %>%
rename(response = V1) %>%
gather(key = 'gene', value = 'gene_expr', -response) %>%
print()
#> # A tibble: 150 x 3
#> response gene gene_expr
#> <dbl> <chr> <dbl>
#> 1 1 V2 26.6
#> 2 1 V2 27.8
#> 3 1 V2 17.8
#> 4 0.75 V2 12.0
#> 5 0.75 V2 15.1
#> 6 0.75 V2 11.0
#> 7 0.35 V2 13.6
#> 8 0.35 V2 14.3
#> 9 0.35 V2 9.62
#> 10 0.1 V2 6.06
#> # ... with 140 more rows
# now let's nest and model
tidy_data %>%
nest(-gene) %>%
mutate(
model = map(data, ~ lm(.$response ~ .$gene_expr)),
rsq = map_dbl(model, ~summary(.)$r.squared))
#> # A tibble: 10 x 4
#> gene data model rsq
#> <chr> <list> <list> <dbl>
#> 1 V2 <tibble [15 x 2]> <S3: lm> 0.775
#> 2 V3 <tibble [15 x 2]> <S3: lm> 0.914
#> 3 V4 <tibble [15 x 2]> <S3: lm> 0.891
#> 4 V5 <tibble [15 x 2]> <S3: lm> 0.615
#> 5 V6 <tibble [15 x 2]> <S3: lm> 0.785
#> 6 V7 <tibble [15 x 2]> <S3: lm> 0.362
#> 7 V8 <tibble [15 x 2]> <S3: lm> 0.806
#> 8 V9 <tibble [15 x 2]> <S3: lm> 0.746
#> 9 V10 <tibble [15 x 2]> <S3: lm> 0.695
#> 10 V11 <tibble [15 x 2]> <S3: lm> 0.282
Created on 2018-11-23 by the reprex package (v0.2.0).