我有一个data.frame,我尝试测试(使用WilcoxRankSum-Test)第1和第2行,然后是第3和第4行,依此类推。因此我写了一个循环。因为我必须将它应用于多个数据帧,所以我创建了一个函数来存储这个循环并稍后将其应用于其他人。
我尝试多次重置方括号{}
,或者按照其他几个主题中的建议用sapply替换pval[i]
。
在我看来,循环工作正常。但循环无法访问pval
。很抱歉打扰你一个常见的问题。我是一个新近自学成才(全部来自线程;))。但我找不到问题。如果你看到让生活更轻松的捷径,
我真的很高兴任何评论。
这是我的代码:
ZP <- function(data){
library(exactRankTests)
pval <- vector(length=nrow(data))
k <- seq(1,nrow(data)-1, by=2)
for (i in seq_along(k)) {
pval[i] <- wilcox.exact(as.numeric(data[k[i],6:10]),
as.numeric(data[k[i]+1,6:10]),
alternative = "greater", conf.level=0.95)$p.value
return(pval)
}
}
结果如下:
ZP(realdata)
[1] 0.8492063 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[9] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[17] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[25] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
我希望它看起来像这样,所以我可以稍后将其与数据联系起来:
ZP(realdata)
[1] "pval" "0" "pval" "0" "pval" "0" "pval" "0" "pval" "0" "pval"
[12] "0" "pval" "0" "pval" "0" "pval" "0" "pval" "0" "pval" "0"
[23] "pval" "0" "pval" "0" "pval" "0" "pval" "0" "pval" "0"
我的数据如下:
Proband Lauf Interleukin Ansatz Zeitpunkt Data1 Data2 Data3 Data4 Data5
1 1 1 IFNy stim ZP0 7 2 3 3 7
2 1 1 IFNy neg ZP0 3 2 0 2 1
答案 0 :(得分:1)
所以我终于让我的循环工作了。运行该函数并将其应用于一组数据后, 它会回报我的价值观。但是当R向我显示pval时,我将其设置为'0',它仍为0.我似乎无法在函数外部访问pval。它可能是我遗失的基本内容。
P <- function(x){
library(exactRankTests)
pval <- vector(length=nrow(x))
k <- seq(1, nrow(x), by=2)
for (i in seq_along(k)) {
pval[k[i]] <- wilcox.exact(as.numeric(x[k[i],6:10]),
as.numeric(x[k[i]+1,6:10]),
alternative = "greater", conf.level=0.95)$p.value}
return(pval)
}
答案 1 :(得分:0)
这是一个代码少一点的策略:
library(exactRankTests)
# sample data
realdata <- data.frame(matrix(rnorm(1000),nrow=40))
# odd row indices
x <- seq(1,nrow(realdata)-1,by=2)
pvals <- vector(length=length(x)) # empty vector
for(i in seq_along(x))
pvals[i] <- wilcox.exact(as.numeric(realdata[x[i],]),
as.numeric(realdata[x[i]+1,]),
alternative="greater",
conf.level=0.95)$p.value
答案 2 :(得分:0)
这种尝试(可能与wilcox.exact()
一起规范地工作?)
# data <- iris[rep(1:50,each=2)+c(0,50),] # use some flowers for demonstration
p.vals <- as.numeric(by(data[,1:4],rep(seq(50),each=2), function(rowpair)
wilcox.test(rowpair[,1], rowpair[,2], alt="greater")$p.val))
顺便说一下:如果你只对p.val
感兴趣,那么指定conf.level=0.95
似乎是可有可无的。