我试图找出的矩阵运算的伪代码
我想用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值的示例。
输入:带有p值的nxn矩阵 = 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
...
预期输出:nxn为1和0的二进制矩阵,alpha = 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 :(得分: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