# matrix question

How to insert data in a matrix with a for loop in specific positions of the matrix. for example the position [4,4]=0; [5.20]=0 [17.3]=0, and at the same time place random numbers from a normal distribution. is that possible? any other method?

Thank you

Here is for a one-dimensional vector. It is not too different for an n-dimensional matrix:

x <- rnorm(n=50, mean=100, sd=15)
x <- 0
x <- 0
x <- 0
x

Just simply use matrix indexing, for instance, if you have matrix A with 5 rows and 10 columns you can find the cell values using the index `[i, j]`. That's mean, if you want the value at position 3rd row and 6th column of a matrix A then you have to call `A[3, 6]`. So, you can define a random matrix from a normal distribution :

``````A <- matrix(rnorm(5*10), nrow = 5)
# assign '0' values at 3rd rows and 6th column position
A[3, 6] <- 0
``````

If you have several positions to change you can simply add one by one

``````A[4, 2] <- 0
A[5, 6] <- 0
....
``````

If you have many changes and you want to use loop:

``````for (i in row_index) {
for (j in col_index) {
for(k in values) {
A[row_index[i], col_index[j]] <- values[k]
}
}
}
``````

You must define `row_index` , `column_index` and `values` before executing the loop.

thank you, I will try this .

This is what I am trying to do,
simulation <- function(n_trucks,capacity,tons,hours,PI,PO){

# Truck Capacity application

``````   c_truck <- capacity+congruencial(n_trucks)*(capacity-capacity)
n_camiones<-n_trucks
``````

# Trash of the Block

t_trash <- tons*qnorm(congruencial(1))+tons

# Travel numbers

trashinarea<-matrix(rnorm(n = 5*5,mean = 10,sd = 5),nrow = 5,ncol = 5)
trashinarea[1,1]<-0
inital_position<-trashinarea[PI]
out_position<-trashinarea[PO]
t_recolection <- 0
t_transit <- 0
t_finish_backzoneA <- 0
while (t_trash >0 && t_trash <= c_truck && x==t_finish_backzoneA) {
for (i in 1:trashinarea) {
if(n_camiones==t_recolection)
inital_position<-t_recolection
if(X==t_recolection){
out_position[n_camiones]<-t_transit

``````  }
t_recolection[i] <- 0.5*qnorm(congruencial(1))+1
t_transit[i] <- 0.5*qnorm(congruencial(1))+1
t_finish_backzoneA[i] <- 0.5*qnorm(congruencial(1))+1
x <- cumsum(c(t_recolection,t_transit,t_finish_backzoneA))
if (x[i*3]>=hours)break

}
``````

I have some problems imagining how to tell R this truck will go to the initial position [1,1] because I have 4 trucks and all of them goes and come back but each truck will be in and out of the position as an example: a truck on e[1,1], truck 2=[3,5], etc, when they return and they go out they will use the same position to go out . . My question is, do I need to create a different matrix to make it possible to know or matrix 1= truck goes here, for matrix 2= 2 truck goes here. I need some advice on this,

Hi,
I am not clear quite clear what you exactly want. From my current understanding, you might define transport position using a matrix. If so, then you can use a 3D array. Since you have 4 trucks, whatever size, you can define an array:

``````truck_trans <- array(
NA,
dim = c(5, 5, 4),
dimnames = list(paste0("In", 1:5), paste0("Out", 1:5), paste0("Truck", 1:4))
)
truck_trans
``````

The in-out position will be different for each of the trucks. All can go from the initial position `[1, 1]` to any other position. Hope this will help...

1 Like