我有一个复杂的矩阵,每个人有几行。我创建了一个脚本,我总结了每个人的不同变量。为此,我首先创建一个包含新汇总变量的列表。为了获得这些变量中的一些,我需要介绍if clases如下:
this_iids_roh <- dat[class,]
my_list<-c("Froh"=(sum(this_iids_roh$KB)/2881033),
"chr1"= if (this_iids_roh$CHR==1) {(sum(this_iids_roh$KB)/247249.719)*100},
"chr2"= if (this_iids_roh$CHR==2) {(sum(this_iids_roh$KB)/242193.529)*100},
"chr3"= if (this_iids_roh$CHR==3) {(sum(this_iids_roh$KB)/198295.559)*100})
return(my_list)
然而,当我运行这个脚本时(这只是一小部分)我只得到了#34; Froh&#34;和&#34; chr1&#34;变量。我尝试了几件事,但是在&#34; chr1&#34;之后我无法获得其他变量。 我希望你能帮助我!
答案 0 :(得分:1)
而不是If条件外,您可以直接使用条件来对数据进行子集化。
this_iids_roh <- NULL
this_iids_roh$CHR = rep(c(1,2,3),10)
this_iids_roh$KB = runif(30)*100000
this_iids_roh = as.data.frame(this_iids_roh)
这样做的方法是
my_list<-c("Froh"=(sum(this_iids_roh$KB)/2881033),
"chr1"= {(sum(this_iids_roh$KB[this_iids_roh$CHR==1])/247249.719)*100},
"chr2"= {(sum(this_iids_roh$KB[this_iids_roh$CHR==2])/242193.529)*100},
"chr3"= {(sum(this_iids_roh$KB[this_iids_roh$CHR==3])/198295.559)*100})
> my_list
Froh chr1 chr2 chr3
0.60958 203.99334 251.06703 324.65984
希望这能解决问题。请注意,条件写在上面的方括号内。
alternativly
my_list<-c(Froh= sum(this_iids_roh$KB)/2881033,
chr1= sum(this_iids_roh$KB[this_iids_roh$CHR==1])/2472.49719,
chr2= sum(this_iids_roh$KB[this_iids_roh$CHR==2])/2421.93529,
chr3= sum(this_iids_roh$KB[this_iids_roh$CHR==3])/1982.95559)
my_list
对with()
my_list <- with(this_iids_roh, c(Froh= sum(KB)/2881033,
chr1= sum(KB[CHR==1])/2472.49719,
chr2= sum(KB[CHR==2])/2421.93529,
chr3= sum(KB[CHR==3])/1982.95559))
my_list