2016-07-08 6 views
4

で区切るには次のことを考えてみましょう:入れの引用ベクトルの各要素の周りのマーク、およびコンマ

> n <- 1:4 
> n 
[1] 1 2 3 4 

私はRで、表示されるでしょう'1', '2', '3', '4'ある文字列を(得るように、私はnを変換したいです"'1', '2', '3', '4'"として)。

これは、可変文字列にsqlQuery()を使用している場合によく発生します。残念ながら、この操作を簡単に実行できるようにするには、RegExにはほとんど慣れていません。

私は、各番号の前後に単一引用符を入れて、最後に余分なコンマを持っていません

> paste0(n, collapse = "", sep = ",") 
[1] "1,2,3,4," 

であるために得ている最も近いです。

+0

'sep =" '、' "'(余分な '''に注意してください)、次に '' 'の文字列のまわりに' '' + paste0(... )+ "'" '、基本的には –

+0

@nrussell答えとして投稿してください。 ''%d 'が何を意味するのかを説明できるのであれば、私は感謝しています。ありがとうございました。 – Clarinetist

答えて

6

1つのオプションは、%dはフォーマット関数(printfsprintf、等)のCファミリーからの符号付き整数の標準フォーマットフラグである

paste0(sprintf("'%d'", 1:4), collapse = ", ") 
#[1] "'1', '2', '3', '4'" 

paste0sprintfを使用することです。ヘルプファイル(?sprintf)にさまざまなオプションが表示されます。

sprintf呼び出しが個々の要素の書式設定を処理し、paste0(..., collapse = "<whatever>")が要素の組み合わせを処理するため、これは他の代替方法よりも優先します。あなたの意見は異なるかもしれません。私は、例えばなど、INSERT文の束をSQL Serverにコピーするか、またはC++のマクロを生成するために、冗長な表現を生成する必要がある場合に


私は頻繁に、paste0および他の機能と組み合わせて、sprintf & catを使用します

cat(sprintf("INSERT INTO #tmp(x, y, z) VALUES('%s', %d, %.2f);", 
      letters[1:5], 1:5, rnorm(5)), 
    sep = "\n" 
) 
#INSERT INTO #tmp(x, y, z) VALUES('a', 1, -1.10); 
#INSERT INTO #tmp(x, y, z) VALUES('b', 2, 0.24); 
#INSERT INTO #tmp(x, y, z) VALUES('c', 3, -0.82); 
#INSERT INTO #tmp(x, y, z) VALUES('d', 4, -0.46); 
#INSERT INTO #tmp(x, y, z) VALUES('e', 5, 0.72); 
関連する問題