Pseudocode for matrix operation that I try to find out
- If matrix cell value < alpha, put 1.
- Else 0.
I want to create a binary matrix with the alpha from p-value matrix p.mat
but I cannot handle apply
correctly where I try satisfy the pseudocode.
First approach
# http://stackoverflow.com/a/4236383/54964
new <- apply(p.mat.p, 1, function(x)
if (alpha > x) {
x <- 0
} else {
x <- 1
}
)
Second approach but fails
new <- apply(p.mat.p, 1, function(x)
x <- (x < alpha)
)
print(new)
#Error in match.fun(FUN) : argument "FUN" is missing, with no default
#Calls: apply -> match.fun
#Execution halted
Trial and Code
library("psych")
ids <- seq(1,11)
M.cor <- cor(mtcars)
colnames(M.cor) <- ids
rownames(M.cor) <- ids
p.mat <- psych::corr.test(M.cor, adjust = "none", ci = F)
p.mat.p <- p.mat[["p"]]
alpha <- .00000005
# http://stackoverflow.com/a/4236383/54964
new <- apply(p.mat.p, 1, function(x)
if (alpha > x) {
x <- 0
} else {
x <- 1
}
)
#Error in alpha > x :
# comparison (6) is possible only for atomic and list types
#Calls: sapply -> lapply -> FUN
#Execution halted
Example with a square matrix and a p-value for alpha.
Input: nxn matrix with a p-value = p.mat.p
# str(p.mat.p)
num [1:11, 1:11] 0.00 4.04e-09 1.09e-09 4.32e-06 1.78e-05 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:11] "1" "2" "3" "4" ...
..$ : chr [1:11] "1" "2" "3" "4" ...
# 1 2 3 4 5
#1 0.000000e+00 4.037623e-09 1.091445e-09 4.322152e-06 1.780708e-05
#2 4.037623e-09 0.000000e+00 1.659424e-09 5.625666e-07 5.174268e-05
#3 1.091445e-09 1.659424e-09 0.000000e+00 1.304240e-05 4.935086e-06
...
Expected output: nxn binary matrix of ones and zeros, alpha=0.2 and the intended output is
[,1] [,2] [,3] [,4] [,5]
[1,] FALSE TRUE FALSE TRUE FALSE
[2,] TRUE TRUE TRUE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE TRUE
R: 3.3.1
OS: Debian 8.5