[解決済み】Rのリストにオブジェクトを追加する償却定数時間、O(1)?
2022-04-01 15:43:07
質問
Rリストがある場合
mylist
であれば、項目を追加することができます。
obj
のようになります。
mylist[[length(mylist)+1]] <- obj
しかし、もっとコンパクトな方法があるはずだ。 私がRを使い始めたばかりの頃、次のように書いてみたことがあります。
lappend()
というように。
lappend <- function(lst, obj) {
lst[[length(lst)+1]] <- obj
return(lst)
}
が、当然ながら R の call-by-name セマンティックスのためにうまくいきません (
lst
は呼び出し時に事実上コピーされるので
lst
のスコープ外では見えません。
lappend()
. R関数で環境ハッキングをして、関数のスコープ外に到達して呼び出し環境を変異させることができるのは知っていますが、それは単純なappend関数を書くための大きなハンマーのように思えます。
どなたか、もっと美しい方法をご提案いただけないでしょうか?もしそれがベクトルとリストの両方で動作するならば、ボーナスポイントです。
どのように解決するのですか?
文字列のリストであれば、単に
c()
関数を使用します。
R> LL <- list(a="tom", b="dick")
R> c(LL, c="harry")
$a
[1] "tom"
$b
[1] "dick"
$c
[1] "harry"
R> class(LL)
[1] "list"
R>
ベクターでも使えるから、ボーナスポイントもらえるかな?
編集(2015-2-01)しました。
この記事は5回目の誕生日を迎えようとしています。 いくつかの親切な読者はそれで任意の欠点を繰り返しているので、是非、以下のコメントの一部も参照してください。に対する一つの提案
list
の型があります。
newlist <- list(oldlist, list(someobj))
一般に、Rの型は、すべての型と用途に対して1つだけのイディオムを持つことを難しくしていることがあります。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] 償却期間一定
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"置換する項目数が置換長の倍数でない "と表示されるのはなぜですか?
-
[解決済み] 不適合な配列のコードエラー
-
[解決済み】ggplotの線幅を変更するには?
-
[解決済み】Rでの関数の最適化(L-BFGS-Bでは'fn'に有限の値が必要)。
-
[解決済み】ggplot boxplotでPosition-dodge警告?
-
[解決済み】RでAIC中に行数が変化するのはなぜですか?そうならないようにするにはどうしたらいいですか?
-
[解決済み】Rで文字ベクトルから引用符を削除する
-
[解決済み】二項演算子への非数値引数【非公開
-
[解決済み】seq_alongはうまくいくが、seqが意図しない結果を生む例とは?
-
[解決済み] Rでリストに要素を追加する方法(ループ) [duplicate]