2

重複の可能性:
Rでその場で変数に名前を付ける方法は?

、、 ...、list1という名前のタイプリストのオブジェクトが10個あります。そして、関数からの出力を使用して、次のようなループを介してこれらのリスト変数の最初のインデックスを置き換えたいと思いました。list2list10FUNfor

for (i in 1:10){
  eval(parse(test=(paste("list",i,sep=""))))[[1]] <- FUN()
}

しかし、これは機能しません。私もlapplyこのように使用しましたが、これも間違っています。

 lapply(eval(parse(text=(paste("list",i,sep=""))))[[1]], FUN)

ご意見をいただければ幸いです。

4

2 に答える 2

4

これはFAQ7.21です。そのFAQの最も重要な部分は、そのようにするのではなく、すべてをリストに入れてリストを操作することを示す最後の部分です。

次のようなコードを使用して、オブジェクトをリストに入れることができます。

mylists <- lapply( 1:10, function(i) get( paste0('list',i) ) )

次に、次のようなコードで置換を行うことができます。

mylists <- lapply( mylists, function(x) { x[[1]] <- FUN()
  x} )

これで、すべてのリストを保存したり、すべてのリストを削除したりする場合は、名前を再度ループするのではなく、操作する必要のあるオブジェクトが1つだけになります。各リストに何か他のことをしたい場合は、ループを気にせずに、リスト全体でlapplyまたはsapplyを1つの簡単なステップで使用するだけです。必要に応じて、元の名前と一致するようにリストの要素に名前を付け、その方法でそれらにアクセスすることもできます。関心のあるすべてのものを単一のリストに保持すると、コードがより安全になり、誤って別のオブジェクトを上書きまたは削除する可能性がはるかに低くなります。

于 2012-11-07T18:37:50.993 に答える
2

あなたはおそらく次のようなものが欲しいでしょう

for (i in 1:10) {
  nam <- paste0("list", i)  ## built the name of the object
  tmp <- get(nam)           ## fetch the list by name, store in tmp
  tmp[[1]] <- FUN()         ## alter 1st component of tmp using FUN()
  assign(nam, value = tmp)  ## assign tmp back to the current list
}

ループとして。

于 2012-11-07T15:17:58.460 に答える