创建由返回向量的自定义函数填充的数据框架

时间:2014-02-17 23:52:26

标签: r dataframe

我在下面有以下代码,我想要做的是填充数据框。应该从自定义函数rX返回每一行(它返回一个包含3个数字的向量)。

我已经想出了两种方法来实现这一目标,但他们都觉得有点像解决方案,我想知道是否有人有更好的建议方式。

方法1涉及循环遍历每个迭代,将结果存储在临时变量中,然后将其放在数据框中的正确位置

第二种方法将数据绑定,但是我留下了空行,需要在之后将其删除。

n=500
ff<-c(0.2,0.3,0.5,0.25)

rX<-function(ff){  
  #generate data frame to hold set selections
  rands<-runif(3)
  s<-rep(0,3)

  for(x in 1:3){
    #generate probabalities from FF
    probs<-cumsum(ff/sum(ff))
    #select first fracture set
    s[x]<-min(which(probs>=rands[x]))
    #get rid of set and recalc
    s[x]
    ff[s[x]]<-0
  }
  rx<-s
}

解决方案

#way 1
df_sets<-data.frame(s1=rep(0,n),s2=rep(0,n),s3=rep(0,n))
for (i in 1:n){
  a<-rX(ff)
  df_sets$s1[i]<-a[1]
  df_sets$s2[i]<-a[2]
  df_sets$s3[i]<-a[3]
}
head(df_sets)

#way 2
df_sets<-data.frame(s1=0,s2=0,s3=0)
for (i in 1:n){
  a<-rX(ff)
  df_sets<-rbind(df_sets,a)
}
df_sets<-df_sets[-1,]
head(df_sets)

编辑:

该功能的关键在于创建许多实现,这些实现从(不替换)选择离散概率的预定向量。函数rX将使用静态输入,如上面的函数所示。它将通过将0和1之间的随机数与每个点的累计百分比进行比较来选择一个数据点。然后它将删除此点重新计算概率函数并重新比较。

0 个答案:

没有答案