9

この質問に(ほとんど)答えている過程で、私は本当に以前に見たはずの何かに出くわしました。リストがあるとしましょう:

l <- list(a = 1:3, b = letters[1:3], c = runif(3))

さまざまな型に強制しようとするとl、エラーが返されます。

> as.numeric(l)
Error: (list) object cannot be coerced to type 'double'
> as.logical(l)
Error: (list) object cannot be coerced to type 'logical'

ただし、リストを文字に強制することは明らかに許可されていますが、この結果は期待していませんでした:

> as.character(l)
[1] "1:3"                                                        
[2] "c(\"a\", \"b\", \"c\")"                                     
[3] "c(0.874045701464638, 0.0843329173512757, 0.809434881201014)"

むしろ、リストを文字に強制することが許可されていれば、次のような動作が見られると思っていたでしょう。

> as.character(unlist(l))
[1] "1"                  "2"                  "3"                  "a"                  "b"                 
[6] "c"                  "0.874045701464638"  "0.0843329173512757" "0.809434881201014"

リスト要素を指定する方法は、もともとの出力に影響することに注意してくださいas.character

l <- list(a = c(1,2,3), b = letters[1:3], c = runif(3))
> as.character(l)
[1] "c(1, 2, 3)"                                                 
[2] "c(\"a\", \"b\", \"c\")"                                     
[3] "c(0.344991483259946, 0.0492411875165999, 0.625746068544686)"

2 つの質問があります。

  1. 対. as.character_ l_ 1:3_c(1,2,3)
  2. 正確には、どのような状況でこれを行いたいですか?as.character()リストを呼び出して、このフォームの出力を取得したいのはいつですか?
4

2 に答える 2

7

自明でないリストの場合、as.characterを使用deparseして文字列を生成します。

  1. ベクトルが整数で 1,2,3,...,n の場合のみ - として逆解析され1:nます。

    c(1,2,3)double1:3は整数ですが...

  2. わかりません:-)

...しかし、ここでdeparse理解したい場合は見てas.characterください:

deparse(c(1L, 2L, 3L)) # 1:3
deparse(c(3L, 2L, 1L)) # c(3L, 2L, 1L)
deparse(c(1, 2, 3))    # c(1, 2, 3)
于 2011-09-29T02:04:56.710 に答える
6

ヘルプファイルには

リストの場合、長さ 1 の文字ベクトルの最初の要素を抽出することを除いて、要素を個別に逆解析します。

についての [オンラインではない] 質問に答えようとして、以前にこれを見たことがありますgrep。検討:

> x <- list(letters[1:10],letters[10:19])
> grep("c",x)
[1] 1 2

grepas.characteronxを使用します。その結果、両方にc(含まれているため、両方のコンポーネントが一致します。それを理解するのにしばらく時間がかかりました。

なぜこれを行うのですか?」については、R コアのメンバーの 1 人がこれを実行することを望んでいたと思います。

于 2011-09-29T02:07:44.967 に答える