使用gridExtra

时间:2015-09-09 13:48:15

标签: r gridextra

我有一系列的调查问题,并且正在报告学校,学校家庭和整个董事会的回复。有些问题很长 - 我想要做的是在列结束时自动换行。现在我必须手动添加换行符。这甚至可能吗?我使用的是R版本3.2.1和gridExtra_2.0.0。

一些代码:

library(gridExtra)
library(grid)
library(ggplot2)

key <- c("I feel close to other parents with children the same age", "I am comfortable asking for advice about parenting", "I take time out to take care of my own health and well−being")
SCH <- c(20,30,40)
FOS <- c(25,35,56)
BOARD <- c(32,44,58)

d <- data.frame(key, SCH, FOS, BOARD)

row.names(d) <- d[,1]
d[,1] <- NULL

g <- tableGrob(d)

g$widths <- unit (c(0.4, 0.1,0.1,0.1),"npc")
grid.newpage()
grid.draw(g)

2 个答案:

答案 0 :(得分:7)

您可以使用strwrap

来实现此目的
key <- c("I feel close to other parents with children the same age", "I am comfortable asking for advice about parenting", "I take time out to take care of my own health and well−being")

key_wraped <- strwrap(key, width = 30, simplify = FALSE) # modify 30 to your needs
key_new <- sapply(key_wraped, paste, collapse = "\n")

d <- data.frame(key_new, SCH, FOS, BOARD)

对我来说,这导致: enter image description here

答案 1 :(得分:0)

另一个选择是Paul Murrell的“splitString”功能:

splitString <- function(text) {
 strings <- strsplit(text, " ")[[1]]
 newstring <- strings[1]
 linewidth <- stringWidth(newstring)
 gapwidth <- stringWidth(" ")
 availwidth <-
     convertWidth(unit(1, "npc"),
                    "inches", valueOnly=TRUE)
 for (i in 2:length(strings)) {
     width <- stringWidth(strings[i])
     if (convertWidth(linewidth + gapwidth + width,
                        "inches", valueOnly=TRUE) <
            availwidth) {
         sep <- " "
         linewidth <- linewidth + gapwidth + width
         } else {
             sep <- "\n"
             linewidth <- width
             }
    newstring <- paste(newstring, strings[i], sep=sep)
     }
 newstring
}

library(grid)
pushViewport(viewport())

grid.text(splitString("There was once a very long string that had to take up the entire viewport and then some but luckily there was also a function called 'splitString'"))