如何在列表中存储迭代编号值?

问题描述 投票:0回答:3

我有迭代编号值 lambdaSample1_1、lambdaSample1_2、lambdaSample1_3.... lambdaSample1_1000。

# 1000 random lambdas for dataset 3
  
for (i in 1:numSamples) {
    # generate ramdomNumber for credible interval
    randomNumber <- floor(runif(numSamples, min = 1, max = nrow(mcmcMatrix)))
    assign(paste0("lambdaSample3_", i), mcmcMatrix[randomNumber[[i]], lambdas[[3]]])
}

我通过使用 1 ~ 1000 中的随机数随机选择值,从具有 60000 行的矩阵中获得了 lambdaSample3_1 ~ lambdaSample3_1000。

现在我喜欢做的是将生成的值“lambda1_1”~“lambda1_1000”合并到一个列表中

我想在一个列表中存储 1,000 个值。有什么方法可以让我编写简单的代码而不是将 1,000 个值写入列表中?

mylist <- list(lambdaSample1_1, lambdaSample1_2 ,,,,, lambdaSample1_1000) 

for (i in 1:numSamples) {
    # generate ramdomNumber for credible interval
    randomNumber <- floor(runif(numSamples, min = 1, max = nrow(mcmcMatrix)))
    assign(paste0("lambdaSample3_", i), mcmcMatrix[randomNumber[[i]], lambdas[[3]]])
}

如何在不写下 1000 次 lambdaSample1_x 的情况下制作这种类型的列表?

r list function
3个回答
0
投票

未经测试的代码,因为您的问题不可重现,但类似于

lamdaSamples1 <- lapply(
                    floor(runif(numSamples, min = 1, max = nrow(mcmcMatrix))),
                    function(x) mcmcMatrix[x, lambdas[[3]]]
                  )

首先将对象添加到列表中可以完全避免该问题。

lapply
的工作原理是将第二个参数中的函数依次应用于第一个参数中的所有值。 它的返回值是一个列表。

因此,作为一个简单的示例,要获取前三个方块的列表,我们可以编写

lapply(1:3, function(x) x*x)
[[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1] 9

0
投票
mylist <- lapply(seq(1000), \(x) paste0("lambdaSample1_", x))

mylist <- list(paste0("lambdaSample1_", seq(1000)))

取决于您到底需要什么。 (我并不是 100% 清楚 - 但其中之一应该可以做你想做的事。)


0
投票

我不确定你有什么,但你可以尝试一下

x1 <- 1;x2 <- 2;x3 <- 3 # assuming these are already exist
xx <- paste0("x", c(1:3))


mylist <- lapply(xx,get)
names(mylist) <- xx
mylist

$x1
[1] 1

$x2
[1] 2

$x3
[1] 3

所以你可以尝试一下

mylist <- lapply(paste0("lambdaSample1_", c(1:1000)), get)
names(mylist) <- paste0("lambdaSample1_", c(1:1000)
© www.soinside.com 2019 - 2024. All rights reserved.