Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建由返回向量的自定义函数填充的数据帧_R_Dataframe - Fatal编程技术网

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

R 创建由返回向量的自定义函数填充的数据帧,r,dataframe,R,Dataframe,我有下面的代码,我想做的是填充一个数据帧。每一行都应该从自定义函数rX返回(它返回一个包含3个数字的向量) 我想出了两种方法来实现这一点,但它们都感觉有点像是变通办法,我想知道是否有人有更好的建议 方法1涉及循环每次迭代,将结果存储在临时变量中,然后将其放置在数据帧中的正确位置 第二种方法是rbinds入数据,但我留下了一个空白行,需要在之后去掉它 n=500 ff<-c(0.2,0.3,0.5,0.25) rX<-function(ff){ #generate data

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

我想出了两种方法来实现这一点,但它们都感觉有点像是变通办法,我想知道是否有人有更好的建议

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

第二种方法是rbinds入数据,但我留下了一个空白行,需要在之后去掉它

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
}
n=500

ff考虑到您的
rX
功能,我会像.data.frame(t(replicate(10,rX(ff)))一样执行
。提供更现实的
rX
,以获得更稳健的解决方案。请注意,在R中使用矩阵要快得多。因此,除非绝对必要,否则不要转换为数据帧。为此,您能否详细介绍一下提供更真实的rX?我将编辑帖子,以反映rX要使用的内容
replicate
,因为
rX
不接受任何输入。提供接收输入的
rX
示例,并指定如何将这些输入传递到
rX
#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)