QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3036|回复: 0
打印 上一主题 下一主题

R语言入门——离散的高维变量的数据生成

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-10-8 17:29 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    [color=rgba(0, 0, 0, 0.75)]R语言入门——离散的高维变量的数据生成: a6 g) K0 y# V" ]" W9 S/ J
    目录
    • 0引言
    • 1、函数代码及其结果
      • 1.1、固定取值空间的情况
        • 案例1.1
        • 案例1.2) u' j; E; Q& F8 q8 C) r9 J1 E
      • 1.2、每个参数空间长度不固定
        • 案例2.1
        • 案例2.2
        • 案例2.3
          # X8 {4 {7 T5 ]7 L6 ^0 Q5 F

        2 [0 B2 T1 F3 H8 c9 @" ~
    • 2、总结# C0 G) `, @+ M* ~4 i7 ]* ~+ d
    . C4 \: ~" N7 k, x2 s/ ]
    8 p/ Y# _7 X, p
    0引言

    今天应同学需求,写了个关于生成任意高维离散参数的组合数据。具体要求如下:

    • 需要生成k个取值离散参数
    • 每一个参数取值有限
      ' d+ Z! g5 S4 {, _7 U, n为了更好的理解需求,给出一个比较常见的例子。由X1和X2两个参数,每个参数取值为0和1。需要生成的结果如下:, C4 m/ j4 C- N# J. h' D
    [color=rgba(0, 0, 0, 0.75)]X1X2/ j( D) N& e) g2 y! ]1 Y. P! M) v
    006 u- n; b$ \# _8 j  G2 ]- c
    01- w: F8 n6 X: l9 N9 U% a
    11$ t9 g3 Z1 h! A$ A7 w
    10

    $ o  S3 h/ G7 C

    但是想产生任意维度,每个维度的取值空间不同的数据该怎么办?下面是我的解决方案和大家分享一下。

    1、函数代码及其结果1.1、固定取值空间的情况

    为了找寻思路先来个情况比较特殊的。嘿嘿,不多解释直接上代码:

    # 1、参数空间固定# n是参数个数,C是每个参数的取值空间fun <- function(n = 3, C = C){  Data <- c()  p = length(C)  for(i in 1:n){    Data <- cbind(Data, rep(C, each = p^(n-i), time = p^(i-1)))  }  Data}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
      . u: D7 m2 N# ]- Q

    接下来是这个代码使用案例:

    案例1.1## 参数空间# 生成数据> C <- c(0, 2, 3)> # 两个参数> fun(n = 2, C = C)      [,1] [,2] [1,]    0    0 [2,]    0    2 [3,]    0    3 [4,]    2    0 [5,]    2    2 [6,]    2    3 [7,]    3    0 [8,]    3    2 [9,]    3    3> fun(n = 3, C = C)  #  增加变量个数      [,1] [,2] [,3] [1,]    0    0    0 [2,]    0    0    2 [3,]    0    0    3 [4,]    0    2    0 [5,]    0    2    2 [6,]    0    2    3 [7,]    0    3    0 [8,]    0    3    2 [9,]    0    3    3[10,]    2    0    0[11,]    2    0    2[12,]    2    0    3[13,]    2    2    0[14,]    2    2    2[15,]    2    2    3[16,]    2    3    0[17,]    2    3    2[18,]    2    3    3[19,]    3    0    0[20,]    3    0    2[21,]    3    0    3[22,]    3    2    0[23,]    3    2    2[24,]    3    2    3[25,]    3    3    0[26,]    3    3    2[27,]    3    3    3
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 447 G% ]2 ~" }* P/ g# t
    案例1.2# 改变空间> C <- c(0, 2, 3, 4)> fun(n = 2, C = C)      [,1] [,2] [1,]    0    0 [2,]    0    2 [3,]    0    3 [4,]    0    4 [5,]    2    0 [6,]    2    2 [7,]    2    3 [8,]    2    4 [9,]    3    0[10,]    3    2[11,]    3    3[12,]    3    4[13,]    4    0[14,]    4    2[15,]    4    3[16,]    4    4
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20. l5 b. x# D9 i; J$ J6 q4 y6 \
    1.2、每个参数空间长度不固定

    依然直接给出函数:

    fun2 <- function(n = 3, ...){  arg = list(...)  p <- c()  for(k in 1:n){    p[k] <- length(arg[[k]])  }  Data <- c()  for(i in 1:n){    Data <- cbind(Data, rep(arg[],    each = prod(p)/prod(p[1:i]), time = prod(p[1:i])/p))  }  Data}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 130 B9 [: Y+ F& K; x; ^: J
    案例2.1

    两个参数,空间长度不同。

    # 生成数据> C1 <- c(1, 2)> C2 <- c(3, 4, 5)> C3 <- c(6, 7)> # 函数调用> fun2(n = 2, C1, C2)     [,1] [,2][1,]    1    3[2,]    1    4[3,]    1    5[4,]    2    3[5,]    2    4[6,]    2    5
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
      " x/ v  v8 `, |- o9 o. N8 z- i
    案例2.2

    两个参数,空间长度相同,可以发现对于空间长度相同的参数也可以使用fun2来实现。

    # 注:数据使用案例2.1中的数据> fun2(n = 2, C1, C3)     [,1] [,2][1,]    1    6[2,]    1    7[3,]    2    6[4,]    2    7
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7% `0 G1 Q1 j9 L- y, S
    案例2.3

    三个参数,不同状态空间。

    # 注:数据使用案例2.1中的数据> fun2(n = 3, C1, C2, C3)      [,1] [,2] [,3] [1,]    1    3    6 [2,]    1    3    7 [3,]    1    4    6 [4,]    1    4    7 [5,]    1    5    6 [6,]    1    5    7 [7,]    2    3    6 [8,]    2    3    7 [9,]    2    4    6[10,]    2    4    7[11,]    2    5    6[12,]    2    5    7
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
      ' |+ {" |" `3 P; F/ ~0 X9 H- I. d0 S
    2、总结

    上述函数的核心思想在于对rep函数的each和time参数的灵活应用以及高中数列的知识。再写不同参数空间的数据生成函数fun2时,还应该注意输入参数...的使用使函数使用更加方便。
    . o7 A7 }6 C3 ^9 o- l9 h最后欢迎大家发现错误及时在评论区指出,若有更好的方法在评论区域给出一起学习探讨。

    * u% a% [: T* H, a2 \6 d" v
    ; m2 ?; h( j& H( F: y6 [( I. t, X
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-10 20:28 , Processed in 1.114310 second(s), 51 queries .

    回顶部