2016-11-13 177 views
-2

伪矩阵操作,我试着找出如何用R中的数值矩阵创建二元矩阵?

  1. 如果矩阵单元格值<α,把1
  2. ,否则为0

我想创建一个二元矩阵与从p值矩阵p.mat alpha,但我不能正确处理apply我试图满足伪代码。

第一种方法

# http://stackoverflow.com/a/4236383/54964 
new <- apply(p.mat.p, 1, function(x) 
    if (alpha > x) { 
     x <- 0 
    } else { 
     x <- 1 
    } 
) 

第二条本办法,但未能

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 

审判和代码

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 

示例具有正方形矩阵和alpha值的p值。

输入:n×n个具有p值矩阵 = 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 
... 

预期输出:n×n个一和零,α-= 0.2和期望的输出的二进制矩阵是

 [,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
操作系统:Debian 8.5

+0

你能给输入矩阵加上阿尔法值,然后想要的输出矩阵?我不确定你是否只是寻找一些地板/天花板功能。 – hhh

+0

'as.numeric(your_matrix Gregor

+1

使用您的试用码可以正常工作。在新的R会话中再次尝试。 – Gregor

回答

1

alpha <- .00000005 
p.mat.p <- (p.mat.p < alpha) 
str(p.mat.p) 
print(p.mat.p) 

输出

logi [1:11, 1:11] TRUE TRUE TRUE FALSE FALSE TRUE ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:11] "1" "2" "3" "4" ... 
    ..$ : chr [1:11] "1" "2" "3" "4" ... 
     1  2  3  4  5  6  7  8  9 10 11 
1 TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
2 TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
3 TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
4 FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE 
5 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE 
6 TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
7 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE 
8 FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE 
9 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE 
10 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE 
11 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE