2016-11-13 224 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