3

print ステートメントの出力をフォーマットして、print ステートメント内の要素が小さな均一なギャップ (1、3、または 5 個の空白のギャップ) で区切られるようにしたいと考えています。それは可能ですか?

以下の例では、print ステートメントのすべての要素が、print ステートメントの最初の要素と同じ長さ (ここでは or のいずれかの長さ) であると想定されていると思いaa1ますaa2

ステートメントが目的のprint.gap形式になりません。各要素の間に一定数のスペースを追加するだけです。

aa1 <- 'abcdefghijklmnopqrstuvwxyz'
aa2 <- 'abc'

bb  <- 10
cc  <- 222

print(c(aa1,bb,cc))

# [1] "abcdefghijklmnopqrstuvwxyz" "10"                         "222" 

print(c(aa2,bb,cc))

# [1] "abc" "10"  "222"

# desired output:

# [1] "abcdefghijklmnopqrstuvwxyz"   "10"   "222" 
#
# or
#
# [1] "abcdefghijklmnopqrstuvwxyz"   10   222 

アドバイスありがとうございます。おそらく、ステートメントの代わりにcatステートメント andを使用する必要があります。多分これのいくつかのバリエーション: How to print R variables in middle of Stringsprintfprint

4

2 に答える 2

4

これにより、途中まで到達できます。

x <- c(aa1,bb,cc)

options(useFancyQuotes = FALSE)
cat(paste(dQuote(x), collapse="   "), "\n")
# "abcdefghijklmnopqrstuvwxyz"   "10"   "222" 

上記のコードは行の折り返しを考慮していないため、「途中」と言います。文字列の非常に長いベクトルを渡すと、それらはすべて単一の非常に長い折り返しのない行に分類されます...


行をラップする 1 つの方法を示すように編集されています。

strwrap()(thanks @mnel) とgsub(),の組み合わせを使用して、行の折り返しを取得できます。

xs <- c(x,x,x,x)

cat(gsub("\" \"", "\"   \"", 
    strwrap(paste(dQuote(xs), collapse=" "), 70)), sep="\n")
# "abcdefghijklmnopqrstuvwxyz"   "10"   "222"   "abcdefghijklmnopqrstuvwxyz"
# "10"   "222"   "abcdefghijklmnopqrstuvwxyz"   "10"   "222"
# "abcdefghijklmnopqrstuvwxyz"   "10"   "222"

gsub()(ベクトル要素間に複数のスペースが必要な場合は、の呼び出しが必要です。これstrwrap()は、 が入力の空白を破棄するためです。)

于 2012-10-02T23:03:52.047 に答える
2

コメントを回答として投稿します

独自のprint.characterメソッドを作成し、strwrap適切な行の長さに折り返すために使用できます。

残念ながらstrwrap、すべての空白を破棄し、単一のスペースに置き換えます

print.character <- function(x, width = getOption('width'), .sep = '  '){
  cat(paste(strwrap(paste(dQuote(x), collapse = .sep, sep =.sep), width),  
  collapse = '\n'), '\n')
}
x <- c(aa1,bb,cc)
print(x)
## "abcdefghijklmnopqrstuvwxyz" "10" "222"
print(rep(x,10))
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222" 

文字変数内の空白では期待どおりに機能しません

print('Does not work  with strings with  variable spaces that you \n might \t \t \t want to keep')
"Does not quite work with strings with variable spaces that you might want to keep" 
于 2012-10-03T00:17:07.447 に答える