326

リストがあり、そこから1つの要素を削除したいと思います。これどうやってするの?

この関数のわかりやすい名前がリファレンスマニュアルにあると思うものを調べてみましたが、適切なものは見つかりませんでした。

4

18 に答える 18

243

私は 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 に設定しないでください。これにより、対応するコンポーネントがリストから削除されます。

これは、要素を削除する方法を(やや逆方向に)教えてくれるようです。

それが役立つこと、または少なくとも正しい方向にあなたを導くことを願っています.

于 2009-03-16T21:16:57.553 に答える
38

Rでリストの最後の要素を削除する方法は次のとおりです。

x <- list("a", "b", "c", "d", "e")
x[length(x)] <- NULL

x がベクトルの場合、新しいオブジェクトを作成する必要があります。

x <- c("a", "b", "c", "d", "e")
x <- x[-length(x)]
  • リストベクトルの作業
于 2011-01-13T20:58:21.550 に答える
23

単一行のリストから Null 要素を削除する:

x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]

乾杯

于 2010-07-26T16:14:54.890 に答える
17

名前付きリストがあり、特定の要素を削除したい場合は、次を試すことができます。

lst <- list(a = 1:4, b = 4:8, c = 8:10)

if("b" %in% names(lst)) lst <- lst[ - which(names(lst) == "b")]

lstこれにより、要素ab、のリストが作成されcます。2行目は、要素bが存在することを確認した後、要素を削除します(@hjvが言及した問題を回避するため)。

またはそれ以上:

lst$b <- NULL

このようにして、存在しない要素を削除しようとしても問題ありません (例: lst$g <- NULL)

于 2014-02-26T12:20:10.353 に答える
10

-要素の位置とともに (負号)を使用します。たとえば、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
于 2018-09-10T15:32:32.397 に答える
9

これに対する回答がまだ必要かどうかはわかりませんが、R での限られた (3 週間分の R の独学) 経験から、NULL割り当てを使用することは実際には間違っているか、特に動的に更新している場合は最適ではないことがわかりました。 forループのようなリスト。

より正確に言うと、

myList[[5]] <- NULL

エラーをスローします

myList[[5]] <- NULL : 置換の長さはゼロです

また

交換するよりも多くの要素が提供されています

より一貫して機能することがわかったのは、

myList <- myList[[-5]]
于 2015-06-10T14:31:31.190 に答える
5

名前付きリストの場合は、l["name"] <- NULL. 例えば:

l <- list(a = 1, b = 2, cc = 3)
l['b'] <- NULL
于 2017-04-28T15:20:47.603 に答える
1

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))]
于 2017-08-25T21:00:37.100 に答える
-1

使用できますwhich

x<-c(1:5)
x
#[1] 1 2 3 4 5
x<-x[-which(x==4)]
x
#[1] 1 2 3 5
于 2012-11-16T14:56:36.743 に答える