10

私は2つの大小のリストを持っています。大きなリストのどの要素が小さなリストにないか知りたいです。リストはプロパティで構成されています

([1] "character"           "vector"              "data.frameRowLabels"
[4] "SuperClassMethod"

ここに私が得ている小さな例とエラーがあります

 A <- c("A", "B", "C", "D")
 B <- c("A", "B", "C")
  new <- A[!B]
Error in !B : invalid argument type

予想される出力は new <- c("D") です

4

3 に答える 3

17

見てくださいhelp("%in%")- そのページの一番下に、この状況に対処する例があります。

A <- c("A", "B", "C", "D")
B <- c("A", "B", "C")
(new <- A[which(!A %in% B)])

# [1] "D"

編集:

Tyler が指摘するように、私自身のアドバイスを参考にして、サポート ドキュメントを読む必要があります。この例でwhich()使用する場合は不要です。%in%そう、

(new <- A[!A %in% B])

# [1] "D"
于 2012-04-24T13:26:12.113 に答える
5

!論理ベクトルでのみ機能します。 Bは論理的ではありません。これがエラーの原因です。作成しようとしているステップを分解すると、これが表示されます (つまり!B)。この場合、%in%(またはmatch) を使用します。

A[!A %in% B]

上記のコードを分解するには:

  1. A %in% B に存在するTRUEの値用の論理ベクトルを作成します。AB
  2. !A %in% B(1)の論理を否定(反転)します
  3. A[!A %in% B]TRUE(2) にある要素のベクトルを返します
于 2012-04-24T13:30:00.267 に答える
3

setsさまざまなリストを扱うのに役立つと思いますが。

あなたの場合、次のものを使用できます。

A <- c("A", "B", "C", "D")
B <- c("A", "B", "C")

# to find difference
setdiff(A, B)

# to find intersect
intersect(A, B)

# to find union
union(A, B)
于 2015-09-27T23:39:29.690 に答える