リストがあり、そこから1つの要素を削除したいと思います。これどうやってするの?
この関数のわかりやすい名前がリファレンスマニュアルにあると思うものを調べてみましたが、適切なものは見つかりませんでした。
私は R をまったく知りませんが、少し創造的なグーグル検索でここにたどり着きました。http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html
そこからの重要な引用:
リストから要素を削除する方法についてのRの明示的なドキュメントは見つかりませんが、試行錯誤で教えてくれます
myList[[5]] <-NULL
5 番目の要素を削除し、その要素の削除によって生じた穴を「閉じます」。それはインデックス値を混乱させるので、要素を削除する際には注意が必要です。リストの後ろから前に向かって作業をしなければなりません。
スレッドの後半でのその投稿への応答は次のように述べています。
リストの要素を削除するには、R FAQ 7.1 を参照してください。
また、R FAQ の関連セクションには次のように記載されています。
... x[i] または x[[i]] を NULL に設定しないでください。これにより、対応するコンポーネントがリストから削除されます。
これは、要素を削除する方法を(やや逆方向に)教えてくれるようです。
それが役立つこと、または少なくとも正しい方向にあなたを導くことを願っています.
Rでリストの最後の要素を削除する方法は次のとおりです。
x <- list("a", "b", "c", "d", "e")
x[length(x)] <- NULL
x がベクトルの場合、新しいオブジェクトを作成する必要があります。
x <- c("a", "b", "c", "d", "e")
x <- x[-length(x)]
単一行のリストから Null 要素を削除する:
x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]
乾杯
名前付きリストがあり、特定の要素を削除したい場合は、次を試すことができます。
lst <- list(a = 1:4, b = 4:8, c = 8:10)
if("b" %in% names(lst)) lst <- lst[ - which(names(lst) == "b")]
lst
これにより、要素a
、b
、のリストが作成されc
ます。2行目は、要素b
が存在することを確認した後、要素を削除します(@hjvが言及した問題を回避するため)。
またはそれ以上:
lst$b <- NULL
このようにして、存在しない要素を削除しようとしても問題ありません (例: lst$g <- NULL
)
-
要素の位置とともに (負号)を使用します。たとえば、3 番目の要素を削除する場合は、次のように使用します。your_list[-3]
入力
my_list <- list(a = 3, b = 3, c = 4, d = "Hello", e = NA)
my_list
# $`a`
# [1] 3
# $b
# [1] 3
# $c
# [1] 4
# $d
# [1] "Hello"
# $e
# [1] NA
リストから単一の要素を削除する
my_list[-3]
# $`a`
# [1] 3
# $b
# [1] 3
# $d
# [1] "Hello"
# $e
[1] NA
リストから複数の要素を削除
my_list[c(-1,-3,-2)]
# $`d`
# [1] "Hello"
# $e
# [1] NA
my_list[c(-3:-5)]
# $`a`
# [1] 3
# $b
# [1] 3
my_list[-seq(1:2)]
# $`c`
# [1] 4
# $d
# [1] "Hello"
# $e
# [1] NA
これに対する回答がまだ必要かどうかはわかりませんが、R での限られた (3 週間分の R の独学) 経験から、NULL
割り当てを使用することは実際には間違っているか、特に動的に更新している場合は最適ではないことがわかりました。 forループのようなリスト。
より正確に言うと、
myList[[5]] <- NULL
エラーをスローします
myList[[5]] <- NULL : 置換の長さはゼロです
また
交換するよりも多くの要素が提供されています
より一貫して機能することがわかったのは、
myList <- myList[[-5]]
名前付きリストの場合は、l["name"] <- NULL
. 例えば:
l <- list(a = 1, b = 2, cc = 3)
l['b'] <- NULL
lapply と grep の使用:
lst <- list(a = 1:4, b = 4:8, c = 8:10)
# say you want to remove a and c
toremove<-c("a","c")
lstnew<-lst[-unlist(lapply(toremove, function(x) grep(x, names(lst)) ) ) ]
#or
pattern<-"a|c"
lstnew<-lst[-grep(pattern, names(lst))]
使用できますwhich
。
x<-c(1:5)
x
#[1] 1 2 3 4 5
x<-x[-which(x==4)]
x
#[1] 1 2 3 5