【问题标题】:Use Apply and Replicate in a function for a matrix在矩阵的函数中使用 Apply 和 Replicate
【发布时间】:2022-01-10 13:11:27
【问题描述】:

我有一个 N x N 数字矩阵,我在 R 中转换为一个数据框,我需要将rnorm 应用于每个单元格。但是,我想使用applyreplicate 来进行这个计算。我当前在第一个单元格(具有标题)中的计算代码是:

firstCell <- data.frame(
    rnorm(1000, mean = matrixName[2,1], sd = 0.8*matrixName[2,1])
)

我尝试先使用apply

matrixApply <- apply(
    matrixName, c(1,2), function(x) rnorm(
        1000, 
        mean = x, 
        sd = 0.8*x
    )
)

现在,我想使用 replicate 将相同的计算复制 1000 次,从而生成该 N x N 矩阵的 1000 个实例。但是,当我使用下面的代码时,我只是得到了相同的矩阵,重复了 1000 次。

useReplicate <- replicate(n=1000, matrixApply, simplify=F)

【问题讨论】:

  • 你想要的输出是什么? 导致这个 N x N 矩阵的 1000 个实例 ...所以数据帧列表?请说明matrixName 是如何定义的。
  • @Parfait 我想要这个 N x N 矩阵的 1000 个实例的列表,这就是我尝试使用复制的原因。但是,当我使用上面的复制代码时,我只会得到相同的矩阵重复 1000 次。
  • @Parfait matrixName 只是我转换为数据框的 N x N 矩阵
  • 我仍然不确定您想要的结果。 实例是什么意思?现在您的 apply 返回一个 1000 X N X N 的 3 维数组。为什么这不是您想要的结果?

标签: r apply replicate


【解决方案1】:

replicate 重复一个表达式。将表达式分配给对象 matrixApply 后,replication 不知道 matrixApply 是如何生成的。
你想要:

useReplicate <- replicate(n=1000, apply(
    matrixName, c(1,2), function(x) rnorm(
        1000, 
        mean = x, 
        sd = 0.8*x
    )
), simplify=F)

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2021-05-11
    • 2017-03-19
    相关资源
    最近更新 更多