kable格式输入 table R

Format input in kable table R

这是我的可重现代码:

library(splines)
var = c(1,2,3,4,5,6,7,8,9,10)
degree.freedom <- c(4,5,6)

list1 <- list()
list2 <- list()
for (i in 1:length(degree.freedom)){
  attr <- attr(bs(var, df=degree.freedom[i]) ,"knots")
  list1[[i]] <- names(attr)
  list2[[i]] <- unname(attr)
}
knitr::kable(cbind(list1,list2), col.names=c("list1","list2"))

WHere 我得到以下 table:

但我想获得一个更漂亮的 table 作为:

我可以对 list1list2 做些什么来获得想要的 table?

注意: 我制作了所需的 table 使用:

list1 <- c("[50%]","[33.33%, 66.67%]","[25%, 50%, 75%]")
list2 <- c("[5.0]","[4.0, 7.0]","[3.25, 5.50, 7.75]")

如果你有一个列表,比如list1:

[[1]]
[1] "50%"

[[2]]
[1] "33.33333333333332859638%" "66.66666666666665719276%"

[[3]]
[1] "25%" "50%" "75%"

您可以转换为逗号分隔值,用括号括起来:

paste0('[', lapply(list1, paste, collapse = ', '), ']')

[1] "[50%]"                                                "[33.33333333333332859638%, 66.66666666666665719276%]"
[3] "[25%, 50%, 75%]"

在这种情况下,lapply 将每个元素一起使用 paste,而 collapse 将在值之间插入逗号。

由于您使用的是 splines 中的 bs,它会生成字符值百分比。位数取决于您的设置。对我来说:

getOption("digits")
[1] 22

(注意最后的随机数字是噪声...)

您可以通过设置指定打印的位数(不是小数位):

options(digits = 4)

哪个会给你:

|list1            |list2             |
|:----------------|:-----------------|
|[50%]            |[5.5]             |
|[33.33%, 66.67%] |[4, 7]            |
|[25%, 50%, 75%]  |[3.25, 5.5, 7.75] |

另请注意:kable 允许设置 digits;但是,这适用于数值。字符值不会受到影响。