Объединение нежелательно применяет максимальную ширину символа - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь напечатать несколько смешанных текстов и переменных в одной строке.c() нежелательно заставляет все символьные поля быть шириной наибольшего поля, т.е. в этом случае 12 символов.Как просто получить простую конкатенацию?

> print(c('Splitting col',i,'x<', xsplitval),quote=FALSE)
[1] Splitting col 9             x<            6.7   

(я уже проверил все вопросы SO и всю документацию по R, о печати, опциях, формате и списках рассылки R, а также Google и т. Д.)

Ответы [ 3 ]

4 голосов
/ 27 сентября 2011

Вы, вероятно, хотите использовать paste:

i <- 9
xsplitval <- 6.7

paste('Splitting col',i,'x<', xsplitval, sep="")
[1] "Splitting col9x<6.7"
1 голос
/ 27 сентября 2011

Я предлагаю для этой цели функцию конкатенации и печати cat. Другой вариант - message, который отправляет вывод в stderr.

> i <- 9
> xsplitval <- 6.7
> cat('Splitting col ',i,' x<', xsplitval, '\n', sep="")
Splitting col 9 x<6.7
> message('Splitting col ',i,' x<', xsplitval, sep="")
Splitting col 9 x<6.7

c - функция объединения значений в вектор; он выстраивает результат в одинаково разнесенные столбцы, чтобы упростить просмотр полученного вектора.

> c('Splitting col ',i,' x<', xsplitval)
[1] "Splitting col " "9"              " x<"            "6.7"  

paste объединяет символьные векторы вместе, а sprintf аналогичен функции C, но оба возвращают символьные векторы, которые выводятся (по умолчанию) с кавычками и с числами, дающими индекс, с которого начинается каждая строка вывода, так что вы можете обернуть их в cat или message.

> s1 <- paste('Splitting col ',i,' x<', xsplitval, sep=""); s1
[1] "Splitting col 9 x<6.7"
> cat(s1,'\n')
Splitting col 9 x<6.7 

> s2 <- sprintf("Splitting col %i, x<%3.1f", i, xsplitval); s2
[1] "Splitting col 9, x<6.7"
> cat(s2,'\n')
Splitting col 9, x<6.7 
1 голос
/ 27 сентября 2011

Другим вариантом является использование функции sprintf, которая позволяет некоторое форматирование чисел:

i <- 9
xsplitval <- 6.7
sprintf("Splitting col %i, x<%3.1f", i, xsplitval)
...