0

写循环是我存在的祸根。我有这个功能,它有效:

rnd.data<-function(x){ min.x<-min(x[,2]) max.x<-max(x[,2]) min.y<-min(x[,3]) max .y<-max(x[,3]) data.table(x = runif(34, min.x, max.x))[, y := runif(34, min.y, max.y)] }

它的目的是模拟参数中的数据,这些参数取决于我为其编写的第一个数据集的相关数据帧的列,只有 2 列我想模拟样本但是我有额外的数据帧,理想情况下我有不同数量的列将编写一个带有 for 循环的函数,该函数可以计算我想要输入的所有数据帧的样本,因为我需要模拟每个数据帧 1000 多个样本

我厌倦了将开头写成: rnd2.data<-function(x){ n<-dim(x)[2] for(i in 1:n){ if(n > 3){ 但后来卡住了下一步该做什么

任何帮助将不胜感激谢谢!

4

1 回答 1

1

此功能允许您在不循环的情况下执行此操作:

ff<-function(x,r){
  apply(x,2,function(z) do.call(runif,as.list(c(r,range(z)))))
}

> set.seed(123)
> x<-cbind(1:10,11:20,51:60)
> ff(x,10)
          [,1]     [,2]     [,3]
 [1,] 3.588198 19.61150 59.00585
 [2,] 8.094746 15.08001 57.23523
 [3,] 4.680792 17.09814 56.76456
 [4,] 8.947157 16.15370 59.94843
 [5,] 9.464206 11.92632 56.90135
 [6,] 1.410008 19.09842 57.37677
 [7,] 5.752949 13.21479 55.89659
 [8,] 9.031771 11.37854 56.34728
 [9,] 5.962915 13.95129 53.60244
[10,] 5.109533 19.59053 52.32402
> 

如果您想忽略某些列,只需调用,例如ff(x[,-1],10)orff(x[,2:3],10)等​​。

如果要将其应用于数据框列表,则可以调用

lapply(listOfData,ff,numberOfSamples)
于 2013-10-04T21:41:06.003 回答