杨利霞 发表于 2020-10-8 17:29

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

R语言入门——离散的高维变量的数据生成
目录
[*]0引言
[*]1、函数代码及其结果
[*]
[*]1.1、固定取值空间的情况
[*]
[*]案例1.1
[*]案例1.2

[*]1.2、每个参数空间长度不固定
[*]
[*]案例2.1
[*]案例2.2
[*]案例2.3


[*]2、总结


0引言今天应同学需求,写了个关于生成任意高维离散参数的组合数据。具体要求如下:
[*]需要生成k个取值离散参数
[*]每一个参数取值有限
为了更好的理解需求,给出一个比较常见的例子。由X1和X2两个参数,每个参数取值为0和1。需要生成的结果如下:

X1X2
00
01
11
10

但是想产生任意维度,每个维度的取值空间不同的数据该怎么办?下面是我的解决方案和大家分享一下。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
接下来是这个代码使用案例:案例1.1## 参数空间# 生成数据> C <- c(0, 2, 3)> # 两个参数> fun(n = 2, C = C)      [,1] [,2]     0    0     0    2     0    3     2    0     2    2     2    3     3    0     3    2     3    3> fun(n = 3, C = C)  #  增加变量个数      [,1] [,2] [,3]     0    0    0     0    0    2     0    0    3     0    2    0     0    2    2     0    2    3     0    3    0     0    3    2     0    3    3    2    0    0    2    0    2    2    0    3    2    2    0    2    2    2    2    2    3    2    3    0    2    3    2    2    3    3    3    0    0    3    0    2    3    0    3    3    2    0    3    2    2    3    2    3    3    3    0    3    3    2    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
[*]44
案例1.2# 改变空间> C <- c(0, 2, 3, 4)> fun(n = 2, C = C)      [,1] [,2]     0    0     0    2     0    3     0    4     2    0     2    2     2    3     2    4     3    0    3    2    3    3    3    4    4    0    4    2    4    3    4    4
[*]1
[*]2
[*]3
[*]4
[*]5
[*]6
[*]7
[*]8
[*]9
[*]10
[*]11
[*]12
[*]13
[*]14
[*]15
[*]16
[*]17
[*]18
[*]19
[*]20
1.2、每个参数空间长度不固定依然直接给出函数:fun2 <- function(n = 3, ...){  arg = list(...)  p <- c()  for(k in 1:n){    p <- length(arg[])  }  Data <- c()  for(i in 1:n){    Data <- cbind(Data, rep(arg[],    each = prod(p)/prod(p), time = prod(p)/p))  }  Data}
[*]1
[*]2
[*]3
[*]4
[*]5
[*]6
[*]7
[*]8
[*]9
[*]10
[*]11
[*]12
[*]13
案例2.1两个参数,空间长度不同。# 生成数据> C1 <- c(1, 2)> C2 <- c(3, 4, 5)> C3 <- c(6, 7)> # 函数调用> fun2(n = 2, C1, C2)     [,1] [,2]    1    3    1    4    1    5    2    3    2    4    2    5
[*]1
[*]2
[*]3
[*]4
[*]5
[*]6
[*]7
[*]8
[*]9
[*]10
[*]11
[*]12
[*]13
案例2.2两个参数,空间长度相同,可以发现对于空间长度相同的参数也可以使用fun2来实现。# 注:数据使用案例2.1中的数据> fun2(n = 2, C1, C3)     [,1] [,2]    1    6    1    7    2    6    2    7
[*]1
[*]2
[*]3
[*]4
[*]5
[*]6
[*]7
案例2.3三个参数,不同状态空间。# 注:数据使用案例2.1中的数据> fun2(n = 3, C1, C2, C3)      [,1] [,2] [,3]     1    3    6     1    3    7     1    4    6     1    4    7     1    5    6     1    5    7     2    3    6     2    3    7     2    4    6    2    4    7    2    5    6    2    5    7
[*]1
[*]2
[*]3
[*]4
[*]5
[*]6
[*]7
[*]8
[*]9
[*]10
[*]11
[*]12
[*]13
[*]14
[*]15
2、总结上述函数的核心思想在于对rep函数的each和time参数的灵活应用以及高中数列的知识。再写不同参数空间的数据生成函数fun2时,还应该注意输入参数...的使用使函数使用更加方便。
最后欢迎大家发现错误及时在评论区指出,若有更好的方法在评论区域给出一起学习探讨。

页: [1]
查看完整版本: R语言入门——离散的高维变量的数据生成