2017-09-03 5 views
-1

私はAPIから得ている2つのリストを持っています。どの項目が両方のリストに存在するかを判断するために、Rの2つのリストを比較する必要があります。私はintersect()コマンドでこれを行うことを望んでいましたが、うまくいきませんでした。さらに調べると、各リストは実際にカンマとエスケープ文字で区切られた複数の項目からなる単一のベクトルであることに気付きました。これらのベクトルを複数項目リストに変換してリストを比較することは可能ですか?ここではいくつかのサンプルコードは、次のとおりです。2つの文字ベクトルをRのエスケープ文字と比較するにはどうすればよいですか?

私が何をしたいと思います:

> intersect(x,y) 
[[1]] 
[1] "c" 

私が代わりに何を見ている:

> intersect(x,y) 
list() 

> as.character(x) 
c(\"a\", \"b\", \"c\") 

> as.character(x) 
c(\"c\", \"d\", \"e\") 

をここで何が起こっていますか? xとyをどのように比較すればよいですか?これらのベクトルをリストに変換してintersect()コマンドを使う方法はありますか?

編集:洗練された例とあなたが私の質問に答えていないとして、私はまだ、ここに推測しているが、x場合は、そのような出力を取得されるために、私が見る唯一の方法はあるデータソース

+1

'dput(x)'と 'str(x)'の出力を表示しますか?私は 'x'が本当に文字ベクタであるか、' as.character'がそれを文字に強制しているのか不思議です。 – Aaron

+0

エラーを再現できません。リストバージョンはこのコードに基づいて正常に動作しました。 Ryan Rungeが答えて指摘したように、 'list()'ではなく 'c()'を使うべきです –

+0

本当に 'as.character'の正確な出力ですか?通常は '[1]'で始まり、文字列を引用符で囲みます。 – Aaron

答えて

2

を明らかにyは、最初に実際にRコードを含んでいるリストで、これはあなたが望むベクトルを作成するために使用します。

x <- list('c("a", "b", "c")') 
y <- list('c("c", "d", "e")') 
intersect(x, y) 
## list() 
as.character(x) 
## [1] "c(\"a\", \"b\", \"c\")" 
as.character(y) 
## [1] "c(\"c\", \"d\", \"e\")" 

もしそうなら、あなたがする必要があるのは、これらの式を評価して、あなたが持っていると思うベクトルを持つことです。

xx <- eval(parse(text=x[[1]])) 
yy <- eval(parse(text=y[[1]])) 
xx 
## [1] "a" "b" "c" 
yy 
## [1] "c" "d" "e" 
intersect(xx, yy) 

ライアンルンゲは、「データを異なる言語やソフトウェアの間で共有されるように、このような余分な引用符を持つことは、より頻繁に発生することがあります。それはAPIがアクセスされているかの意図しない影響かもしれないので。」ことを示唆しています(ありがとうございます)

これは、あなたが与えた説明では機能しません。詳細情報が必要です!

-1

アドバイスをいただき、ありがとうございます。私はこのような問題解決ができました:問題を解決し、各リスト名の後の用語[[1]]を入れて、なぜ私は本当に理解していない

intersect(as.list(as.character(x[[1]])),as.list(as.character(y[[1]]))) 

を、しかしそれにもかかわらずにいるようです。

+0

これは、問題を再現するのに十分な情報ではありません。もしあなたがそれを提供しなければ、私たちは他の誰にとっても役に立たないので質問を終わらせます。私はまだ興味があるという質問に興味深い点があったので、もっと多くを提供してくれることを願っています。 – Aaron

関連する問題