R-过早退出循环
我在问一个问题,我试图简化我的数据集,并给出一个我想要的输出的例子。如果这仍然很复杂,请随意发表评论,可能有助于我澄清这一点 我有一个表,其中我对具有相似rt和mz的功能进行了分组R-过早退出循环,r,loops,R,Loops,我在问一个问题,我试图简化我的数据集,并给出一个我想要的输出的例子。如果这仍然很复杂,请随意发表评论,可能有助于我澄清这一点 我有一个表,其中我对具有相似rt和mz的功能进行了分组 orig_feat mz_mid rt_mid similar_feature 1 f_1 685.4350 466.5 f_1 2 f_2 260.1655 245.0 f_2 185
orig_feat mz_mid rt_mid similar_feature
1 f_1 685.4350 466.5 f_1
2 f_2 260.1655 245.0 f_2
185 f_2 260.1665 256.5 f_185
408 f_2 260.1670 239.0 f_408
2334 f_2 260.1650 250.0 f_2334
3 f_3 288.1980 276.0 f_3
7 f_3 288.1990 289.0 f_7
414 f_3 288.1970 275.0 f_414
2181 f_3 288.1980 270.0 f_2181
2969 f_3 288.1965 297.5 f_2969
4 f_4 537.3915 454.5 f_4
2271 f_4 537.3965 435.5 f_2271
5 f_5 439.2990 153.5 f_5
6 f_6 325.0690 210.5 f_6
10 f_6 325.0685 227.0 f_10
747 f_6 325.0685 184.5 f_747
2068 f_6 325.0695 225.0 f_2068
2929 f_6 325.0685 218.0 f_2929
2970 f_6 325.0680 237.0 f_2970
31 f_7 288.1980 276.0 f_3
71 f_7 288.1990 289.0 f_7
4141 f_7 288.1970 275.0 f_414
21811 f_7 288.1980 270.0 f_2181
29691 f_7 288.1965 297.5 f_2969
我想为每个小组列出一个条目。具有相同$orig_专长的所有行都应该“分组”,对于每个“组”,我需要所有特征的向量。请参见下面的所需输出示例
$grf_1
[1] "f_1"
$grf_2
[1] "f_2" "f_185" "f_408" "f_2334"
$grf_3
[1] "f_3" "f_7" "f_414" "f_2181" "f_2969"
$grf_4
[1] "f_4" "f_2771"
$grf_5
[1] "f_5"
$grf_6
[1] "f_6" "f_10" "f_747" "f_2068" "f_2929" "f_2970"
但重要的是,我希望这是非冗余的(例如,gf_3:包含f_7、f_414、f_2181、f_2696,因此当我到达f_7时,我不会为f_7创建一个组,因为f_3组allready包含f_7组中的所有功能)
下面是我的代码。目前,生产的输出在grf_3之后停止。
我不知道为什么它似乎过早地退出循环
mkFeatGroupsList<-function(simFeatsTab){
features_seen<-vector()
GroupingList<-list()
counter=1
for (i in 1:length(unique(simFeatsTab$orig_feat))){
orig_feat2Grp<-simFeatsTab$orig_feat[i]
if (orig_feat2Grp%in%features_seen == TRUE) next
matchingFeats<-subset(simFeatsTab,orig_feat==orig_feat2Grp)$feature
grFeatNm<-paste("grf_",counter,sep="")
GroupingList[[grFeatNm]]<-matchingFeats
features_seen<-c(features_seen,matchingFeats)
counter=counter+1
}
return(GroupingList)
}
我这样说:
- 将数据帧(我称之为
)按feat
orig_feat
- 使用
获取相关功能sapply
- 循环浏览相关功能并消除重复项
feat.split <- split(feat, my.df$orig_feat)
sim.feat <- sapply(feat.split, function(x){x$similar_feature})
for (i in 2:length(sim.feat))
{
# Get all of the previous features
prev.feat <- do.call("c", sim.feat[1:(i-1)])
# Remove features already used
sim.feat[[i]] <- sim.feat[[i]][!sim.feat[[i]] %in% prev.feat]
}
feat.split我这样做:
- 将数据帧(我称之为
feat
)按orig_feat
- 使用
sapply
获取相关功能
- 循环浏览相关功能并消除重复项
也就是说:
feat.split <- split(feat, my.df$orig_feat)
sim.feat <- sapply(feat.split, function(x){x$similar_feature})
for (i in 2:length(sim.feat))
{
# Get all of the previous features
prev.feat <- do.call("c", sim.feat[1:(i-1)])
# Remove features already used
sim.feat[[i]] <- sim.feat[[i]][!sim.feat[[i]] %in% prev.feat]
}
feat.split另一种解决方案可以使用igraph
软件包:
require(igraph)
x<-graph.data.frame(df[,c(1,4)])
#You can also take a look with plot(x)
res<-clusters(x)
split(names(res$membership),res$membership)
#$`1`
#[1] "f_1"
#$`2`
#[1] "f_2" "f_185" "f_408" "f_2334"
#$`3`
#[1] "f_3" "f_7" "f_414" "f_2181" "f_2969"
#$`4`
#[1] "f_4" "f_2271"
#$`5`
#[1] "f_5"
#$`6`
#[1] "f_6" "f_10" "f_747" "f_2068" "f_2929" "f_2970"
require(igraph)
x另一种解决方案可以使用igraph
软件包:
require(igraph)
x<-graph.data.frame(df[,c(1,4)])
#You can also take a look with plot(x)
res<-clusters(x)
split(names(res$membership),res$membership)
#$`1`
#[1] "f_1"
#$`2`
#[1] "f_2" "f_185" "f_408" "f_2334"
#$`3`
#[1] "f_3" "f_7" "f_414" "f_2181" "f_2969"
#$`4`
#[1] "f_4" "f_2271"
#$`5`
#[1] "f_5"
#$`6`
#[1] "f_6" "f_10" "f_747" "f_2068" "f_2929" "f_2970"
require(igraph)
汉克斯,这太好了。现在,在删除以前的功能后,有一些空元素。我试着用这个来移除它们,但没用。其他建议?sim.feat0]@user2814482:试试sim.feat[sapply(sim.feat,length)>0]
谢谢,这太棒了。现在,在删除以前的功能后,有一些空元素。我试着用这个来移除它们,但没用。其他建议?sim.feat0]@user2814482:试试sim.feat[sapply(sim.feat,length)>0]