R:在矩阵中存储的数据帧中循环执行 ks 测试
R: loop performing ks tests across data frame stored in matrix
对于奇怪的语法,我深表歉意,我刚刚在学习编程。我有 100 列和 5304 行的 df。我需要使用第 5 个数字列或参考列对最后数字列中的 94 个 (6:ncol(df)) 执行单独的两侧 ks.tests:
r<-df$rank.
我还想将 p 值存储在矩阵中。据我了解,我可以使用 'for loop' 或 'apply' 函数。我有一个简单的代码,它只输出一个统计摘要(看起来它正在覆盖结果):
for (i in 6:ncol(df))
y<-df[,i]
ks.test(r,y)->K
> K
Two-sample Kolmogorov-Smirnov test
data: r and y
D = 0.71983, p-value < 2.2e-16
alternative hypothesis: two-sided
我已经尝试了很多变体,但使用 lapply 是错误的。
关于为什么 "K" 不应该 return 多个值或将输出分配给矩阵的任何见解?谢谢你。
编辑:示例数据集
probe set symbol zscore rank X1 X4 X13 X15 ....N (N=100)
22133-x_at SP110 4.73635 1 400 14 5 1000
. 2 5 430 56 150
. 3 24 78 23 9000
...N
(N=5304)
考虑 sapply
到 return ks.test
statistic 和 p.value[=17 的矩阵=]:
# RANDOM DATA TO DEMONSTRATE
set.seed(147)
df <- data.frame(id1 = sample(LETTERS, 5304, replace=TRUE),
id2 = sample(LETTERS, 5304, replace=TRUE),
id3 = sample(LETTERS, 5304, replace=TRUE),
id4 = sample(LETTERS, 5304, replace=TRUE),
setNames(lapply(5:100, function(i) rnorm(5304)),
paste0("Col", 5:100)))
r <- df[,5]
res <- sapply(df[,6:100], function(y) {
ks <- ks.test(r, y)
c(statistic=ks$statistic, p.value=ks$p.value)
setNames(c(ks$statistic, ks$p.value), c("statistic", "p.value"))
})
# PRINT FIRST FIVE COLS
res[,1:5]
# Col6 Col7 Col8 Col9 Col10
# statistic 0.02111614 0.01338612 0.01074661 0.0224359 0.01677979
# p.value 0.18774138 0.72887906 0.91933648 0.1384762 0.44412866
对于奇怪的语法,我深表歉意,我刚刚在学习编程。我有 100 列和 5304 行的 df。我需要使用第 5 个数字列或参考列对最后数字列中的 94 个 (6:ncol(df)) 执行单独的两侧 ks.tests:
r<-df$rank.
我还想将 p 值存储在矩阵中。据我了解,我可以使用 'for loop' 或 'apply' 函数。我有一个简单的代码,它只输出一个统计摘要(看起来它正在覆盖结果):
for (i in 6:ncol(df))
y<-df[,i]
ks.test(r,y)->K
> K
Two-sample Kolmogorov-Smirnov test
data: r and y
D = 0.71983, p-value < 2.2e-16
alternative hypothesis: two-sided
我已经尝试了很多变体,但使用 lapply 是错误的。 关于为什么 "K" 不应该 return 多个值或将输出分配给矩阵的任何见解?谢谢你。
编辑:示例数据集
probe set symbol zscore rank X1 X4 X13 X15 ....N (N=100)
22133-x_at SP110 4.73635 1 400 14 5 1000
. 2 5 430 56 150
. 3 24 78 23 9000
...N
(N=5304)
考虑 sapply
到 return ks.test
statistic 和 p.value[=17 的矩阵=]:
# RANDOM DATA TO DEMONSTRATE
set.seed(147)
df <- data.frame(id1 = sample(LETTERS, 5304, replace=TRUE),
id2 = sample(LETTERS, 5304, replace=TRUE),
id3 = sample(LETTERS, 5304, replace=TRUE),
id4 = sample(LETTERS, 5304, replace=TRUE),
setNames(lapply(5:100, function(i) rnorm(5304)),
paste0("Col", 5:100)))
r <- df[,5]
res <- sapply(df[,6:100], function(y) {
ks <- ks.test(r, y)
c(statistic=ks$statistic, p.value=ks$p.value)
setNames(c(ks$statistic, ks$p.value), c("statistic", "p.value"))
})
# PRINT FIRST FIVE COLS
res[,1:5]
# Col6 Col7 Col8 Col9 Col10
# statistic 0.02111614 0.01338612 0.01074661 0.0224359 0.01677979
# p.value 0.18774138 0.72887906 0.91933648 0.1384762 0.44412866