如何创建任意数量的随机向量列?

时间:2017-03-15 17:08:14

标签: r dataframe

我经常需要写一些像

这样的东西
sample_size = 10^4
my_data <- data.frame(x1 = runif(sample_size, 0,3), x2 = runif(sample_size, 0,3), x3 = runif(sample_size, 0,3), x4 = runif(sample_size, 0,3))

为了测试一些统计模型。例如,

error <- rnorm(sample_size, 0, 0.1)
y <- with( my_data, 2*x1+0.1*(x2 + x3 + x4)) + error
my_model <- lm(y ~ ., data = my_data)

由于my_data用作lm的输入,因此它必须是数据框(或列表)。

我想知道4次调用runif是否是正确的方法,或者是否有更好的解决方案。我试过了

my_data <- matrix(4*runif(sample_size, 0,3), sample_size, 4, dimnames = list(NULL, paste0("x", 1:4)))
my_data <- as.data.frame(my_data)

但它对我来说似乎并不那么可读。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。我们假设你想要ncol列,这里有一些好方法:

ncol = 4
sample_size = 10

replicate(ncol, runif(sample_size, 0, 3))
matrix(runif(sample_size * ncol, 0, 3), ncol = ncol)
sapply(1:ncol, function(x) runif(sample_size, 0, 3))

这些创建矩阵,您当然可以根据需要转换为数据框。差异很小。 replicate本质上是sapply的一个不错的包装器。直接matrix方法可能稍微更快,但差异可能是几毫秒。