我想创建一个循环以重复数据集列表中的代码行。 每个数据集如下:
gwas_1
ID p
1 0.0000005
2 0.0123474
...
gwas_2
ID p
1 0.0000055
2 0.5854587
...
所以我想创建一个新列并检查每个数据集中新列中的频率。我之前是这样做的
data=gwas_1
data$p_threshold <- ifelse(data$p<0.001, 1, 0)
table (data$p_threshold)
data=gwas_2
data$p_threshold <- ifelse(data$p<0.001, 1, 0)
table (data$p_threshold)
但是意识到它可能不是很有效。您能否帮助我创建一个循环,因为我的循环不起作用(“错误:$运算符对于原子向量无效”):
list=c("gwas_1, gwas_2, gwas_3")
for (db in list){
db$p_threshold <- ifelse(db$p<0.001, 1, 0)
table (db$p_threshold)
}
答案 0 :(得分:1)
尝试一下:
设置数据:
#include <iostream>
#include <fstream>
#include <sstream>
int main() {
std::basic_string<char32_t> str = U"abcdef";
std::basic_stringstream<char32_t> data{ str };
//std::basic_ifstream<char32_t> data("test.txt", std::ios::binary);
size_t dist = std::distance(std::istreambuf_iterator<char32_t>(data), std::istreambuf_iterator<char32_t>());
std::cout << dist << std::endl;
return 0;
}
代码:
set.seed(1337)
tmp <- data.frame(p = runif(100)*.007)
l1 <- list(gwas_1 = tmp, gwas_2 = tmp, gwas_3 = tmp)
结果:
lapply(l1, function(x) table(+(x[["p"]]<0.001)))
#$gwas_1
#
# 0 1
#88 12
#
#$gwas_2
#
# 0 1
#88 12
#
#$gwas_3
#
# 0 1
#88 12
)l1
已经:比lapply
快15倍
ifelse