具有循环的函数,该循环遍历具有不同维度的数据帧列

时间:2013-10-04 21:22:33

标签: function

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

rnd.data< -function(X){   min.x< -min(X [2])   max.x< -max(X [2])   min.y< -min(X [1,3])   max.y< -max(X [1,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'LT; -dim(x)的[2]   for(i in 1:n){     if(n> 3){ 但后来又陷入困境

非常感谢任何帮助 谢谢!

1 个答案:

答案 0 :(得分: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)ff(x[,2:3],10)等。

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

lapply(listOfData,ff,numberOfSamples)