【问题标题】:Generate variables using SimMultiCorrData::nonnormvar1使用 SimMultiCorrData::nonnormvar1 生成变量
【发布时间】:2018-10-17 14:21:26
【问题描述】:

我想使用 SimMultiCorrData 中的 nonnormvar1 函数生成随机的非正态变量。这个函数本身就可以正常工作并输出一个连续变量:

    nonnormvar1(method = "Fleishman", means = 50, vars = 10,
        skews = 3, skurts = 14, n=100)

但是当我在自己的函数中“映射”nonnormvar1 时,我会得到数据列表行作为输出:

    my_func <- function(sample_pairs, sig_pairs, nnorm_pairs) {               
      return(sapply(1:nrow(sample_pairs), function(i) {
      mapply(nonnormvar1, method = "Fleishman",           
      means = mu, vars = sig_pairs[i, ], 
      skews = nnorm_pairs[i,1], skurts = nnorm_pairs[i,2], 
      n = sample_pairs[i], seed = 123)       
      }))
    }

    samples <- matrix(c(rep(c(100, 100), 6), rep(c(50, 50), 6)),
              ncol = 2, byrow = TRUE)

    sigs <- matrix(c(rep(c(2, 2), 6), rep(c(35, 35), 6)),
           ncol = 2, byrow = TRUE)

    nnrom <- matrix(c(rep(c(0, 0), 4), rep(c(2, 4), 4), rep(c(1, 5), 4)), 
            ncol = 2, byrow = TRUE)


    my_func(samples, sigs, nnrom)

         [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]    [,10]   [,11]   [,12]  
     [1,] List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4 
     [2,] List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1 
     [3,] List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11

理想情况下,我想要 12 个包含两个变量的数据帧,每个变量我都可以计算出一个统计数据。我确定有一些明显的东西我错过了,但我没有看到。

【问题讨论】:

    标签: r random distribution mapply


    【解决方案1】:

    我在复制您的示例时遇到了一些麻烦。我必须为 mu 设置一个值并将样本截断到前四行,之后我的代码产生了与你的相似的结果。

    mu <- 0
    samples <- samples[1:4,]
    

    我建议将数据生成转移到一个单独的函数中。另外,我认为您在这里不需要 mapply 功能。要进入数据部分,通过添加 $continuous_variable 来返回 Continuous_variable 元素

    getNNData <- function(i, sample_pairs, sig_pairs, nnorm_pairs) {
      nnData <- nonnormvar1(method = "Fleishman",           
                        means = mu, vars = sig_pairs[i, ], 
                        skews = nnorm_pairs[i,1], skurts = nnorm_pairs[i,2], 
                        n = sample_pairs[i], seed = 123)       
      return(nnData$continuous_variable)
    }
    

    将数据生成作为单独的函数还可以更轻松地探索从函数返回的对象。

    您现在可以在主函数中调用 getNNData 函数

    my_func <- function(sample_pairs, sig_pairs, nnorm_pairs) {               
      sapply(1:nrow(sample_pairs), function(i) 
        getNNData(i, sample_pairs, sig_pairs, nnorm_pairs))
    }
    
    my_func(samples, sigs, nnrom)
    

    希望这能让你更接近你所需要的!

    【讨论】:

    • 谢谢!这是一个简单的解决方案,但真正将数据生成拆分为一个单独的函数会产生很大的不同,并且使用输出更容易。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2018-11-17
    • 1970-01-01
    • 2015-04-04
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多