if语句的问题

时间:2016-09-23 10:52:48

标签: r if-statement

我有一个复杂的矩阵,每个人有几行。我创建了一个脚本,我总结了每个人的不同变量。为此,我首先创建一个包含新汇总变量的列表。为了获得这些变量中的一些,我需要介绍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;之后我无法获得其他变量。 我希望你能帮助我!

1 个答案:

答案 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