を使用して、リストに割り当てる別の方法がありmy_list[[name or number]] <-
ます。本当にループでそれを行いたい場合は、iter1、iter2、... などの名前を持つものをループするだけです
A <- list()
n_iter <- 2
for (i in 1:n_iter){
iname <- paste("iter",i,sep="")
A[[iname]] <- get(iname)
}
@mnel が指摘したように、リストを動的に拡張することは非効率的です。別の方法は、次を使用することだと思いますlapply
:
n_iter <- 2
inames <- paste("iter",1:n_iter,sep="")
names(inames) <- inames
A <- lapply(inames,get)
これは、サブリストに常に 2 つの要素があり、それぞれが一貫したクラス (項目 1 は数値、項目 2 は文字) を持つ場合は、データ フレームでも実行できます。
n_iter <- 2
DF <- data.frame(item1=rep(0,n_iter),item2=rep("",n_iter),stringsAsFactors=FALSE)
for (i in 1:n_iter){
iname <- paste("iter",i,sep="")
DF[i,] <- get(iname)
rownames(DF)[i] <- iname
}
# item1 item2
# iter1 1 a
# iter2 1 b
ただし、これは非常に見苦しい方法です。を使用すると、物事はすぐに混乱しget
ます。データ構造を使用して、ループ内で iter1 と iter2 を作成し、それらをすぐに親リストまたはデータ フレームに埋め込みたいと思いませんか?
n_iter = 10
DF <- data.frame(item1 = rep(0,n_iter), item2 = rep("",n_iter))
for (i in 1:n_iter){
... do stuff to make anum and achar ...
DF[i,"item1"] <- anum
DF[i,"item2"] <- achar
}
anum と achar は、その反復から格納する item1 と item2 の値です。SOdata.table
の他の場所では、この種のデータフレーム割り当てのほぼ 10 倍の速度/効率のパッケージを使用する代替手段があると彼らは言います。
ああ、最後のアイデア: それらを最初にリストに入れたい場合は、後で簡単にデータ フレームに変換できます。
DF <- do.call(rbind.data.frame,A)