Обтекание длинной строки текстом в выводе Knitr (RStudio)

У меня есть длинная векторная строка (последовательность ДНК) длиной до нескольких тысяч последовательных символов, которую я хочу добавить к выходным данным отчета Knitr. RStudio отлично справляется с переносом текста в консоли, но когда я генерирую HTML-вывод, я вижу только одну строку текста, и она просто уходит со страницы.

Выход RStudio

вязальный выход

Есть ли способ настроить вывод вязания для переноса текста?

Спасибо.


person biomiha    schedule 03.06.2014    source источник
comment
Пробовал, но не работает.   -  person biomiha    schedule 04.06.2014
comment
Я только что понял, что у вас есть вектор, а не длинная строка. Можете ли вы привести минимальный воспроизводимый пример?   -  person daroczig    schedule 04.06.2014


Ответы (1)


Я рекомендую вам попробовать R Markdown v2. Шаблон HTML по умолчанию выполняет перенос текста за вас. Это достигается с помощью определений CSS для тегов HTML pre/code, например. word-wrap: break-word; word-break: break-all;. Эти определения на самом деле взяты из Bootstrap (в настоящее время rmarkdown использует Bootstrap 2.3. .2).

Вы все еще использовали первую версию R Markdown, а именно markdown. упаковка. Вы, безусловно, можете достичь той же цели, используя некоторые пользовательские определения CSS, и для этого вам просто нужно больше узнать о HTML/CSS.

Другое решение — вручную разбить длинную строку с помощью функции str_break(), которую я написал ниже:

A helper function `str_break()`:

```{r setup}
str_break = function(x, width = 80L) {
  n = nchar(x)
  if (n <= width) return(x)
  n1 = seq(1L, n, by = width)
  n2 = seq(width, n, by = width)
  if (n %% width != 0) n2 = c(n2, n)
  substring(x, n1, n2)
}
```

See if it works:

```{r test}
x = paste(sample(c('A', 'C', 'T', 'G'), 1000, replace = TRUE), collapse = '')
str_break(x)
cat(str_break(x), sep = '\n')
```
person Yihui Xie    schedule 07.06.2014
comment
Функция strwrap() у меня почему-то не работает, строка все равно убегает за экран. До сих пор лучшим способом для меня было использование CSS def overflow-wrap: break-word, но как вставить разрывы строк между несколькими строками? например ‹div style=overflow-wrap: break-word› {r, echo=FALSE, eval=TRUE, tidy=FALSE, strip.white=FALSE} paste(sample(c("A","C","T","G"),1000,replace=T),collapse="") paste(sample(c("A","C","T","G"),1000,replace=T),collapse="") ‹/div› - person biomiha; 07.06.2014
comment
@biomiha strwrap() не работает в вашем случае, потому что в строке нет пробелов, поэтому он не знает, как правильно разбить строку. Я дам вам альтернативную функцию. Самое простое решение — это то, что я сказал вначале: используйте rmarkdown (rmarkdown.rstudio.com). Если вы действительно хотите возиться с CSS, это нормально, но вам нужно больше узнать о пакете уценки, о том, как настроить шаблон и т. д. (support.rstudio.com/hc/en-us/articles/), что может занять несколько часов. если не возражаешь. - person Yihui Xie; 07.06.2014
comment
Да, функция str_break идеальна. Спасибо, Ихуи. - person biomiha; 08.06.2014