使用 SimMultiCorrData::nonnormvar1 生成变量
Generate variables using SimMultiCorrData::nonnormvar1
我想使用 SimMultiCorrData 中的 nonnormvar1 函数生成随机的非正态变量。这个函数本身工作得很好并输出一个连续变量:
nonnormvar1(method = "Fleishman", means = 50, vars = 10,
skews = 3, skurts = 14, n=100)
但是当我在自己的函数中 'mapply' 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 个包含两个变量的数据帧,每个数据帧我都可以计算出一个统计数据。我确定有一些明显的东西我想念但我没有看到它。
我在复制您的示例时遇到了一些问题。我必须为 mu 设置一个值并将样本截断到前四行,之后我的代码产生的结果与您的相似。
mu <- 0
samples <- samples[1:4,]
我建议将数据生成移到一个单独的函数中。另外,我认为您在这里不需要 mapply 函数。通过添加 $continuous_variable
获取数据部分 return 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)
}
将数据生成作为一个单独的函数还可以更轻松地探索从您的函数中 returned 的对象。
您现在可以在主函数中调用 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)
希望这能让您更接近您的需求!
我想使用 SimMultiCorrData 中的 nonnormvar1 函数生成随机的非正态变量。这个函数本身工作得很好并输出一个连续变量:
nonnormvar1(method = "Fleishman", means = 50, vars = 10,
skews = 3, skurts = 14, n=100)
但是当我在自己的函数中 'mapply' 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 个包含两个变量的数据帧,每个数据帧我都可以计算出一个统计数据。我确定有一些明显的东西我想念但我没有看到它。
我在复制您的示例时遇到了一些问题。我必须为 mu 设置一个值并将样本截断到前四行,之后我的代码产生的结果与您的相似。
mu <- 0
samples <- samples[1:4,]
我建议将数据生成移到一个单独的函数中。另外,我认为您在这里不需要 mapply 函数。通过添加 $continuous_variable
获取数据部分 return 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)
}
将数据生成作为一个单独的函数还可以更轻松地探索从您的函数中 returned 的对象。
您现在可以在主函数中调用 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)
希望这能让您更接近您的需求!