r - 在数据集模拟中循环
问题描述
我希望在 R 中获得以下问题的帮助。
我有以下代码根据指数分布生成 30 列数据集:
x0=0
xmax=8000
xout=3000
lambda=0.0002
n=1
x1=x0+rexp(n,lambda)-xout
x2=x1+rexp(n,lambda)-xout
x3=x2+rexp(n,lambda)-xout
x4=x3+rexp(n,lambda)-xout
x5=x4+rexp(n,lambda)-xout
x6=x5+rexp(n,lambda)-xout
x7=x6+rexp(n,lambda)-xout
x8=x7+rexp(n,lambda)-xout
x9=x8+rexp(n,lambda)-xout
x10=x9+rexp(n,lambda)-xout
x11=x10+rexp(n,lambda)-xout
x12=x11+rexp(n,lambda)-xout
x13=x12+rexp(n,lambda)-xout
x14=x13+rexp(n,lambda)-xout
x15=x14+rexp(n,lambda)-xout
x16=x15+rexp(n,lambda)-xout
x17=x16+rexp(n,lambda)-xout
x18=x17+rexp(n,lambda)-xout
x19=x18+rexp(n,lambda)-xout
x20=x19+rexp(n,lambda)-xout
x21=x20+rexp(n,lambda)-xout
x22=x21+rexp(n,lambda)-xout
x23=x22+rexp(n,lambda)-xout
x24=x23+rexp(n,lambda)-xout
x25=x24+rexp(n,lambda)-xout
x26=x25+rexp(n,lambda)-xout
x27=x26+rexp(n,lambda)-xout
x28=x27+rexp(n,lambda)-xout
x29=x28+rexp(n,lambda)-xout
x30=x29+rexp(n,lambda)-xout
我有三个疑问:
1 - 有没有办法以简化的形式编写这个函数?
2 - 此行(30 列)需要模拟 10,000 次。如何在循环中执行此操作?
3 - 每个单元格(x1,x2,x3 ...)的值必须限制在区间x0和xmax(0-8000)内。这该怎么做?
解决方案
这取决于你想对超过 8000 的值做什么。这是一个解决方案,它只采用这些值并用模运算符将它们包装起来。
library(tidyverse)
test <- data.frame(x0 = rep(0, n))
for (i in 1:30) {
new_col <- sym(paste0("x", i))
old_col <- sym(paste0("x", i - 1))
test <- test %>%
mutate(!!new_col := (!!old_col + rexp(n, lambda) - xout) %% xmax)
}
我不知道您对 tidyverse 和 tidy 评估可能熟悉或不熟悉,我在这里大量使用了它。运算符与!!
结合使用sym()
,将变量名转换为实际变量。操作员将%>%
数据从一个函数“传送”到下一个函数。:=
仅当您想!!
在左侧使用 a 进行分配时才需要该运算符。
我认为这是我第一次尝试在 StackOverflow 上发布答案,所以请放轻松!:)
推荐阅读
- reactjs - 从 Redux 迁移到 React Context API + hooks 时如何处理副作用
- jquery - 在数据表列复选框下拉列表中使用可选择的 jQuery
- json - 将一组表单输入转换为 JSON
- excel - VBA ExportAsFixedFormat to PDF 不打印某些图像
- css - 最佳实践:在背景上绘制形状
- html - 为什么 Chrome 和 Safari 的尺寸不同(媒体查询问题)
- reactjs - 为图像添加价值 React Native
- python - 如何扩展列表以处理诸如“38359*0”之类的元素,我想将其表示为等于 0 的 38359 个元素?
- websphere - 如何从 Websphere Portal 服务器获取 HTML url?
- pagespeed - Google PageSpeed Insights 上的灯塔错误 - ERRORED_DOCUMENT_REQUEST