作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个模拟程序,它需要以下结构:
它有一个for循环,程序会在每次迭代中生成一个向量。我需要将每个生成的向量附加到现有向量。
我不知道如何在 R 中执行此操作。感谢您的帮助。
最佳答案
这些答案有效,但它们都需要调用非确定性函数,如 sample()
在循环。这不是循环不变的代码(每次都是随机的),但它仍然可以移出 for
环形。诀窍是使用 n
参数并预先生成您需要的所有随机数(如果您的问题允许这样做;有些可能不会,但很多会这样做)。现在您调用一个电话而不是 n
电话,如果您的 n
很大。这是一个简单的随机游走示例(但许多问题可以这样表述)。另外,完全披露:我今天没有喝咖啡,所以如果你看到错误请指出:-)
steps <- 30
n <- 100
directions <- c(-1, 1)
results <- vector('list', n)
for (i in seq_len(n)) {
walk <- numeric(steps)
for (s in seq_len(steps)) {
walk[s] <- sample(directions, 1)
}
results[[i]] <- sum(walk)
}
sample()
来重写它。 :
all.steps <- sample(directions, n*steps, replace=TRUE)
dim(all.steps) <- c(n, steps)
walks <- apply(all.steps, 1, sum)
> system.time({
+ for (i in seq_len(n)) {
+ walk <- numeric(steps)
+ for (s in seq_len(steps)) {
+ walk[s] <- sample(directions, 1)
+ }
+ results[[i]] <- sum(walk)
+ }})
user system elapsed
4.231 0.332 4.758
> system.time({
+ all.steps <- sample(directions, n*steps, replace=TRUE)
+ dim(all.steps) <- c(n, steps)
+ walks <- apply(all.steps, 1, sum)
+ })
user system elapsed
0.010 0.001 0.012
sapply()
,或者更好的是
multicore
包的
mclapply()
.革命分析的
foreach
包在这里也可能有用。此外,JD Long 有一个很棒的演示文稿和帖子,内容是通过 Amazon 的 EMR
here 在 Hadoop 上模拟 R 中的内容。 (我找不到视频,但我相信有人会知道)。
numeric(n)
或 vector('list', n)
for
循环。使用其n
巧妙地将随机函数从代码中推出。争论。 sapply()
或 lapply()
,或者更好mclapply
. x <- c(x, rnorm(100))
.每次你这样做,R-core 的成员都会杀死一只小狗。 关于r - R中的载体结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595459/
我是一名优秀的程序员,十分优秀!