我正在嘗試將存盤在包含 1,000 個值的串列中的值與另一個包含年齡的串列相乘。最終,我想將 1,000 行存盤到資料框中。我想知道在這里使用 lapply 函式或 for 回圈函式是否更好。
list 1
lambdaSamples1 <- lapply(
floor(runif(numSamples, min = 1, max = nrow(mcmcMatrix))),
function(x) mcmcMatrix[x, lambdas[[1]]])
*the out put is 1,000 different values in a list. *
list 2
年齡1= 14:29
我想做的是
for (i in 1: numSamples) {
assign(paste0("newRow1_", i), 1-exp(-lambdaSample1[[i]]*ager1))
}
現在我得到了 1,000 行值,我想將它們存盤在一個預先確定的資料幀 outDf_1 (nrow=1000, ncol = ager1) 中。
我試過了
`
for (i in 1:numSamples) {
outDf_1[i,] <- newRow1_i
}
我想將 newRow1_1, ,,,,,, , newRow1_1000 存盤到 outDf_1 資料幀的 1,000 行中的每一行。
我應該采用不同的方式嗎?
uj5u.com熱心網友回復:
我認為你有點過于復雜了。lapplyR 中的許多操作都是矢量化的,因此您不需要for為此回圈。你沒有給我們任何資料來處理,但下面的代碼應該以更直接和快速的方式完成你想要的。
lambdaSamples1 <- mcmcMatrix[sample(nrow(mcmcMatrix), numSamples, replace=T),
lambdas[[1]]]
outDF_1 <- 1 - exp(-lambdaSamples1 %*% t(ager1))
請注意,這會outDF_1生成一個矩陣,而不是一個資料框。
要為多個年齡執行此操作,您可以使用回圈將結果矩陣保存在串列中:
outDF <- list()
x <- 5
for (i in seq_len(x)) {
lambdaSamples <- mcmcMatrix[sample(nrow(mcmcMatrix), numSamples, replace=T),
lambdas[[1]]]
outDF[[i]] <- 1 - exp(-lambdaSamples %*% t(ager[[i]]))
}
這里, ager1, ...,agerx應該存盤在一個串列 ( ager) 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528287.html
標籤:r功能for循环应用
上一篇:如果條件回傳,函式不會停止
