r 从重复循环输出创建矩阵
r create matrix from repeat loop output
对于某些向量 N
中的每个值 n
,我想计算数据框 T
中每个变量的值超过 n
的百分比。
考虑以下输入数据框:
T <- data.frame(A=c(0.1,0.2,0.3), B=c(0.3,0.3,0.9),C=c(1,0.5,0))
T
# A B C
# 1 0.1 0.3 1.0
# 2 0.2 0.3 0.5
# 3 0.3 0.9 0.0
我希望输出是一个如下所示的矩阵:
A B C
n=0.1 66.6 100 66.6
n=0.2 33.3 100 66.6
我当前的实现不工作:
n <- 0.8
repeat {
Tlogic <- T > n
TU <- as.matrix(apply(Tlogic,2,sum))
q = NULL
for (i in seq(along=TU[,1]))
{
percent <- (TU[i]/nrow(T))*100
q = c(q, percent)
}
n <- n - 0.05;
print(n);
if(log(n) < -6) break
}
基本上,对于某些向量 N
中的每个值 n
,您要计算 T
的每一列中超过 n
的值的百分比.
您实际上可以在 R 中的一行中完成此操作,方法是从写出循环的解决方案转移到使用 R 中的 *apply
函数的解决方案:
N <- c(0.1, 0.2)
do.call(rbind, lapply(N, function(n) c(n=n, 100*colMeans(T > n))))
# n A B C
# [1,] 0.1 66.66667 100 66.66667
# [2,] 0.2 33.33333 100 66.66667
对于 N
中的每个值 n
,调用 lapply(N, function(n) c(n=n, 100*colMeans(T > n)))
计算一个向量,该向量指示 n
以及 [= 的每一列中值的百分比14=] 超过 n
。然后 do.call(rbind, ...)
将所有这些组合在一起形成最终输出矩阵。
在您的例子中,您希望 N 从 0.8 到 log(n) < -6
形成递减序列(每步递减 0.05)。在这种情况下,您可以获得 N
向量:
N <- seq(.8, 0, -.05)
N <- N[log(N) >= -6]
对于某些向量 N
中的每个值 n
,我想计算数据框 T
中每个变量的值超过 n
的百分比。
考虑以下输入数据框:
T <- data.frame(A=c(0.1,0.2,0.3), B=c(0.3,0.3,0.9),C=c(1,0.5,0))
T
# A B C
# 1 0.1 0.3 1.0
# 2 0.2 0.3 0.5
# 3 0.3 0.9 0.0
我希望输出是一个如下所示的矩阵:
A B C
n=0.1 66.6 100 66.6
n=0.2 33.3 100 66.6
我当前的实现不工作:
n <- 0.8
repeat {
Tlogic <- T > n
TU <- as.matrix(apply(Tlogic,2,sum))
q = NULL
for (i in seq(along=TU[,1]))
{
percent <- (TU[i]/nrow(T))*100
q = c(q, percent)
}
n <- n - 0.05;
print(n);
if(log(n) < -6) break
}
基本上,对于某些向量 N
中的每个值 n
,您要计算 T
的每一列中超过 n
的值的百分比.
您实际上可以在 R 中的一行中完成此操作,方法是从写出循环的解决方案转移到使用 R 中的 *apply
函数的解决方案:
N <- c(0.1, 0.2)
do.call(rbind, lapply(N, function(n) c(n=n, 100*colMeans(T > n))))
# n A B C
# [1,] 0.1 66.66667 100 66.66667
# [2,] 0.2 33.33333 100 66.66667
对于 N
中的每个值 n
,调用 lapply(N, function(n) c(n=n, 100*colMeans(T > n)))
计算一个向量,该向量指示 n
以及 [= 的每一列中值的百分比14=] 超过 n
。然后 do.call(rbind, ...)
将所有这些组合在一起形成最终输出矩阵。
在您的例子中,您希望 N 从 0.8 到 log(n) < -6
形成递减序列(每步递减 0.05)。在这种情况下,您可以获得 N
向量:
N <- seq(.8, 0, -.05)
N <- N[log(N) >= -6]