how to define global matrix in R

Please see the FAQ: What's a reproducible example (`reprex`) and how do I do one? Using a reprex, complete with representative data will attract quicker and more answers.

Here is what happens outside the function

``````suppressPackageStartupMessages(library(dplyr))
for ( i in 1:5)
{
nam<<-as.name(paste0("mat", i))
gen_sch_mat <<- function(n.row, n.col) t(replicate(n.row, sample(c(rep(0, n.col-1), 1))))
nam <<- gen_sch_mat(5,5)
# print(nam)
} -> exported
exported
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    0    0    0    0    1
#> [2,]    0    0    1    0    0
#> [3,]    0    0    0    1    0
#> [4,]    0    0    1    0    0
#> [5,]    0    0    0    1    0
``````

Created on 2020-03-31 by the reprex package (v0.3.0)

One of the difficulties that experienced programmers frequently encounter is carrying over a procedural/imperative mindset into `R`, which just doesn't have a comfortable home for. Whenever more than trivial imperative style programming is called for, it's done natively in a `C` and brought in.

`R` is more like `Haskell` in the way it presents to `users` rather than `programmers`, it's a `functional` language, just like school algebra: f(x) = y.

Let's work backwards.

Last: Use a function pluck an object from another object
Use a function to place objects into another object
Find a function to generate the underlying object

The pieces are all here.

``````suppressPackageStartupMessages(library(purrr))
# make the names

nams <- paste0("mat",seq(1:5))

# make function to fill a 5x5 matrix with random 1/0s

fill5  <- function(x) {matrix(sample(c(1,0),25,replace = TRUE), nrow = 5, ncol = 5)}

# create the five matrices and assign them to a list called mats

map(nams,fill5) -> mats

# extract the fifth

mats[[5]]
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    1    1    1    0    0
#> [2,]    0    0    0    1    0
#> [3,]    1    1    1    0    1
#> [4,]    1    0    1    0    1
#> [5,]    1    0    1    0    0
``````

Created on 2020-03-31 by the reprex package (v0.3.0)