104

その場で新しい変数名を作成することは可能ですか?

リストからデータフレームを読み取り、最後に数字が付いた新しい変数にしたいと思います。orca1、orca2、orca3..のようなもの

私が次のようなことをしようとすると

paste("orca",i,sep="")=list_name[[i]]

このエラーが発生します

target of assignment expands to non-language object

これを回避する別の方法はありますか?

4

6 に答える 6

131

使用assign:

assign(paste("orca", i, sep = ""), list_name[[i]])
于 2010-04-20T23:03:26.350 に答える
35

orca1orca2、などを使用するよりもリストを使用したほうがよいようorca[1]に思われますorca[2]

通常、変数のリストを作成するのは、変数を数値だけで区別するためです。その数値は、後で変数にアクセスするのに便利な方法だからです。

orca <- list()
orca[1] <- "Hi"
orca[2] <- 59

そうでなければ、assignあなたが望むものです。

于 2010-04-21T00:11:32.463 に答える
11

データフレームを作成しないでください。リストを保持し、その要素に名前を付けますが、添付しないでください。

これの最大の理由は、外出先で変数を作成すると、ほとんどの場合、後でそれらのそれぞれを繰り返し処理して、何か有用なことを実行する必要があるためです。そこで、その場で作成した名前のそれぞれを繰り返し処理する必要があります。

リストの要素に名前を付けて、名前を繰り返し処理する方がはるかに簡単です。

attach に関する限り、R でのプログラミングは非常に不適切であり、注意しないと多くの問題が発生する可能性があります。

于 2013-10-07T13:21:11.093 に答える
0

別のトリッキーな解決策は、リストの要素に名前を付ける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
于 2010-04-21T09:33:41.410 に答える
0

そして、このオプションは?

list_name<-list()
for(i in 1:100){
    paste("orca",i,sep="")->list_name[[i]]
}

それは完全に機能します。あなたが入れた例では、最初の行が欠落しており、エラーメッセージが表示されます。

于 2016-10-27T19:06:29.537 に答える