帮我优化一下:for(i in row.names(data)){ test=wilcox.test(as.matrix(data[,i])~ Type) pvalue=test$p.value Sig=ifelse(pvalue<0.001,"***",ifelse(pvalue<0.01,"**",ifelse(pvalue<0.05,"*",""))) if(pvalue<0.05){ sigVec=c(sigVec, paste0(i, Sig)) sigGeneVec=c(sigGeneVec, i)} }
时间: 2024-02-15 15:05:43 浏览: 163
可以采用以下方式优化这段代码:
1. 预分配sigVec和sigGeneVec的长度,避免在循环中无限增长向量长度。
```
sigVec <- vector("character", length = nrow(data))
sigGeneVec <- vector("character", length = nrow(data))
```
2. 使用apply函数替代for循环,极大地提高代码效率。
```
results <- apply(data, 1, function(x) {
test <- wilcox.test(x ~ Type)
pvalue <- test$p.value
Sig <- ifelse(pvalue < 0.001, "***", ifelse(pvalue < 0.01, "**", ifelse(pvalue < 0.05, "*", "")))
if(pvalue < 0.05) {
paste0(row.names(data)[which(x)], Sig)
} else {
""
}
})
sigVec <- results[results != ""]
sigGeneVec <- row.names(data)[which(results != "")]
```
这样,我们可以将整个数据集作为一个矩阵传递给apply函数,apply函数会自动对每一行应用指定的函数。我们使用匿名函数来执行Wilcoxon秩和检验,并返回结果。最终,我们可以从结果中提取sigVec和sigGeneVec。
阅读全文