その場で新しい変数名を作成することは可能ですか?
リストからデータフレームを読み取り、最後に数字が付いた新しい変数にしたいと思います。orca1、orca2、orca3..のようなもの
私が次のようなことをしようとすると
paste("orca",i,sep="")=list_name[[i]]
このエラーが発生します
target of assignment expands to non-language object
これを回避する別の方法はありますか?
使用assign
:
assign(paste("orca", i, sep = ""), list_name[[i]])
orca1
、orca2
、などを使用するよりもリストを使用したほうがよいようorca[1]
に思われますorca[2]
。
通常、変数のリストを作成するのは、変数を数値だけで区別するためです。その数値は、後で変数にアクセスするのに便利な方法だからです。
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
そうでなければ、assign
あなたが望むものです。
データフレームを作成しないでください。リストを保持し、その要素に名前を付けますが、添付しないでください。
これの最大の理由は、外出先で変数を作成すると、ほとんどの場合、後でそれらのそれぞれを繰り返し処理して、何か有用なことを実行する必要があるためです。そこで、その場で作成した名前のそれぞれを繰り返し処理する必要があります。
リストの要素に名前を付けて、名前を繰り返し処理する方がはるかに簡単です。
attach に関する限り、R でのプログラミングは非常に不適切であり、注意しないと多くの問題が発生する可能性があります。
別のトリッキーな解決策は、リストの要素に名前を付けるattach
ことです。
list_name = list(
head(iris),
head(swiss),
head(airquality)
)
names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)
orca1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
そして、このオプションは?
list_name<-list()
for(i in 1:100){
paste("orca",i,sep="")->list_name[[i]]
}
それは完全に機能します。あなたが入れた例では、最初の行が欠落しており、エラーメッセージが表示されます。