関数 'eval'で作成したオブジェクトに関数 'ggplot'を使用してプロットを割り当てたいとします。このオブジェクトはループ内に配置され、したがってリストとして定義されます。ループの各ラウンドの間、プロットは、変数 'list_pos'を使用してリストの要素として保存する必要があります。eval()を使用した 'subscript out of bounds'エラー - ループ内のassign() - 関数に基づく関数
目的は、3つの異なるグラフ 'Graphs_A'、 'Graphs_B'、 'Graphs_C'を作成して、3つの異なるプロットを保存する要素として作成することです。そのため、結果として私はちょうどR-コードは次のようになります
Graphs_A
を実行することにより、一度、例えば、グループAのために、特定のサブグループのプロットを呼び出すことができます。私の例では、私は常に同じプロットを要素に割り当てていますが、実際のデータセットではそうではありません。
###### Example #####
# Load packages
install.packages('ggplot2')
library(ggplot2)
# Creating data
names <- c("A","B","C")
numbers <- c(1,2,3)
df <- data.frame(
x = c(1, 2, 3, 4, 5, 6, 7, 8),
y = c(3, 2, 4, 4, 6, 8, 9, 8)
)
# Loop to assign ggplot to elements of list
for(j in names){
assign(paste("Graphs_", j, sep=""), list())
list_pos <- 0
for(i in numbers){
list_pos <- list_pos + 1
assign(
eval(parse(text=paste("Graphs_", j, sep="")))[[list_pos]],
ggplot() + geom_point(data=df, aes(x=x, y=y)) # Plot depends in real data set on value of i
)
}
}
私はいつも「subscript out of bounds」というエラーを受け取ります。私は
assign(paste("Graphs_", j, sep=""), list("X","Y","Z"))
としてリストを再定義するような別のものを試してみました。しかし、それは、リストの要素にプロットを割り当てるために助けにはなりませんでした。この問題をどうすれば処理できますか?
'parse'と' assign'は存在しません。あなたはRでより多くの経験があり、悪い(非効率的、理解しにくい、維持しにくい)コードを書くことができるようになるまで、それらのための有効な使用はありません。 – Roland
あなたの答えをありがとう。しかし残念ながら、以前に作成していないオブジェクトに値を割り当てるためには、それらを使用する必要があります。したがって、私が知っているように、私の記事で述べたようにネストされたループを作成する唯一の方法です。 –
する必要はありませんし、そうしないでください。リストを使用してください。 – Roland