【问题标题】:R: Iterating Parameter Arguments from List for Random Generation For LoopR:从列表中迭代参数参数以随机生成循环
【发布时间】:2017-11-29 11:28:53
【问题描述】:

我是论坛和r的新手,所以请原谅草率的代码。

简而言之,我试图获得正态分布以迭代地使用从两个列表中提取的参数用于 For 循环,该循环使用这些参数生成一个 30x10000 随机样本矩阵。 p>

第一个列表 (List1) 是数字向量的集合。第二个列表 (List2) 有相应的值,我想将其用于 rnorm 中的标准偏差参数:即来自 List1 标准偏差的向量 1 是 List2 中的 Value1。

set.seed(1500) #set up random gen
var1 = rnorm(1:1000, mean = #mean of vector(i) from list1, sd = #value(i) from List2)
sample(var1,size=1)
X = matrix(ncol = 30, nrow = 10000)
for(j in 1:length(var1)){ #simulates data using parameters set by rnorm var1 function
    for(i in 1:10000){
    X[i.j] = sample(var1,1)
  }
}

这是原始post 代码的灵感来源。

干杯!

【问题讨论】:

    标签: r


    【解决方案1】:

    看来mapply() 可以帮到你:

    # First let's turn the list1 into means.
    dist.means = lapply(list1,mean) 
    

    Lapply 是一种为列表中的每个元素执行函数的方法。 Mapply 的工作方式非常相似,但使用了多个列表。

    samples = mapply(rnorm, 30*10000, dist.means, list2,SIMPLIFY=F)
    

    更多解释:mapply() 多次运行rnorm()。在第一次尝试中,它使用第一个列表的第一个元素作为第一个参数,第二个列表的第一个元素作为第二个参数,等等。所以在我们的例子中,它将运行 rnorm( 30*10000, dist.means[[1]], list2[[1]] ) 然后 rnorm( 30*10000, dist.means[[2]], list2[[2]] ) 并将输出存储在一个列表。

    请注意,我在这里使用了一个小技巧。第一个列表是单个数字 30*10000。当您提供不同大小的列表进行映射时,它会回收较短的列表,即重复较短的列表,直到它具有与较长列表相同的长度。

    希望有帮助

    【讨论】:

    • 发挥了作用。非常感谢!
    猜你喜欢
    • 2021-05-03
    • 2017-06-10
    • 2022-09-27
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多