R - Append Item Iteratively To Matrix?
1
6
Entering edit mode
10.5 years ago

Hi,

I have a table and a vector, e.g.,

Table =

    A    B    C
s1  0    1    2
s2  1    2    1
s3  2    0    1

Vector:

vec <- c(0.01, 0.087, 0.34)

I wish to iterate over the table to isolate pairs of rows and then use the vector to fit a 1st order linear regression model (Y~A*B). My problem is that I wish to initiate a matrix outside the main for loop and append the variable 'p_value' to that matrix after each iteration.

The code to isolate the p-values is given below:

for (rows in 1:nrow(Table)) { 
    li_row <- Table[rows,] # Extract a single row
    row <- unlist(li_row) # Convert to vector

    for (other in 1:nrow(Table[2, ])) {
        li_row_2 <- Table[other,] # Extract a different single row
        row_2 <- unlist(li_row_2)
        lin_reg <- lm(vec ~ row*row2) # Call 1st order linear model
        summ <- summary(lin_reg) # Store results summary
        f_stat <- summ$fstatistic # Extract F-statistic data
        p_value <- fstat[1] # Extract p-value [**The value to append to matrix**]
    }
}
}}

In short, upon each iteration, I wish to add the 'p-value' to a matrix. I know a priori how big the matrix will be and also know what labels to attach to rows and columns.

Thanks,
S ;-)

r matrix • 30k views
ADD COMMENT
0
Entering edit mode

What are you expecting 1:nrow(Table[2, ]) to evaluate to? This is the same as asking for 1:NULL because Table[2, ] is a vector and has nrow of NULL

ADD REPLY
5
Entering edit mode
10.5 years ago

Quick and dirty answer; concatenate all your p-values into a single vector as you progress

vec <- c(vec, p_value)

and at the end, convert to a matrix

matrix(c(0, 1, 2, 1, 2, 1, 2, 0, 1), nrow = 3)

Better answer; don't iteratively append, but rather map a function down the rows of your table and use R's built-in vectorisation to create a matrix.

A toy example below applies an anonymous function to each row y of matrix x, returning a new matrix. The function adds the row y to another row, also from x, but chosen randomly (without replacement).

x <- matrix(c(1, 2, 3, 10, 10, 10, 4, 5, 6), nrow = 3)
apply(x, 2, function(y) y + x[sample(1:nrow(x), 1), TRUE])
ADD COMMENT

Login before adding your answer.

Traffic: 2179 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6