数学建模社区-数学中国

标题: R语言入门——离散的高维变量的数据生成 [打印本页]

作者: 杨利霞    时间: 2020-10-8 17:29
标题: R语言入门——离散的高维变量的数据生成
[color=rgba(0, 0, 0, 0.75)]R语言入门——离散的高维变量的数据生成
) H5 x: O& m5 n- L; [目录

: @9 c/ `' f  F: D1 p5 o
0 w/ N7 F0 k! c0引言

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

[color=rgba(0, 0, 0, 0.75)]X1X2
* n1 H: W2 `+ I8 f) O$ A% a2 t0 G00& j. h/ ~2 e- q6 C4 i0 T
01
- U" ?' y8 l5 W6 S( `11
& s$ Z+ z( z4 c8 `0 u0 ?& h* A0 s  u10
! ~, U6 e0 w' m! n

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

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.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# 改变空间> 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    41.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}案例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案例2.2

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

# 注:数据使用案例2.1中的数据> fun2(n = 2, C1, C3)     [,1] [,2][1,]    1    6[2,]    1    7[3,]    2    6[4,]    2    7案例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    72、总结

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


% K0 |9 Y, F3 r9 }7 z! D3 G4 a( \0 l( z





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5