在forestplot中,设置字体面,使文本为“;普通的;,不起作用,为什么?
我想让forestplot中的所有文本都变得简单,而不是粗体,有人知道怎么做吗?谢谢在forestplot中,设置字体面,使文本为“;普通的;,不起作用,为什么?,r,R,我想让forestplot中的所有文本都变得简单,而不是粗体,有人知道怎么做吗?谢谢 library(forestplot) # Cochrane data from the 'rmeta'-package cochrane_from_rmeta <- structure(list( mean = c(NA, NA, 0.578, 0.165, 0.246, 0.700, 0.348, 0.139, 1.017, NA, 0.531), lower = c(NA,
library(forestplot)
# Cochrane data from the 'rmeta'-package
cochrane_from_rmeta <-
structure(list(
mean = c(NA, NA, 0.578, 0.165, 0.246, 0.700, 0.348, 0.139, 1.017, NA, 0.531),
lower = c(NA, NA, 0.372, 0.018, 0.072, 0.333, 0.083, 0.016, 0.365, NA, 0.386),
upper = c(NA, NA, 0.898, 1.517, 0.833, 1.474, 1.455, 1.209, 2.831, NA, 0.731)),
.Names = c("mean", "lower", "upper"),
row.names = c(NA, -11L),
class = "data.frame")
tabletext<-cbind(
c("", "Study", "Auckland", "Block",
"Doran", "Gamsu", "Morrison", "Papageorgiou",
"Tauesch", NA, "Summary"),
c("Deaths", "(steroid)", "36", "1",
"4", "14", "3", "1",
"8", NA, NA),
c("Deaths", "(placebo)", "60", "5",
"11", "20", "7", "7",
"10", NA, NA),
c("", "OR", "0.58", "0.16",
"0.25", "0.70", "0.35", "0.14",
"1.02", NA, "0.53"))
forestplot(tabletext,
cochrane_from_rmeta,new_page = TRUE,
is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
clip=c(0.1,2.5),
xlog=TRUE,
col=fpColors(box="royalblue",line="darkblue", summary="royalblue"),
txt_gp = fpTxtGp(label = gpar( font="plain"))) # doesnt work
库(forestplot)
#来自“rmeta”包的Cochrane数据
cochrane__rmeta“使用来源”。。。如果您查看fpTxtGp()
的源代码,您将看到一些元素被硬编码为粗体;例如:
fpTxtGp
函数(标签、摘要、xlab、标题、记号、图例、图例.title、,
cex=1)
{
##某些输出被忽略。。。
ret$title“使用源代码”…如果查看fpTxtGp()
的源代码,您将看到一些元素硬编码为粗体;例如:
fpTxtGp
函数(标签、摘要、xlab、标题、记号、图例、图例.title、,
cex=1)
{
##某些输出被忽略。。。
ret$title现在我将标题更改为plain。但是我得到一个错误,它找不到函数“prGarMerge”,该函数中的另一个函数。是否有方法将代码转换为prGarMerge
fpTxtGp <- function (label, summary, xlab, title, ticks, legend, legend.title,
cex = 1)
{
prGparMergeMultiLevel <- function(ret, element) {
name <- deparse(substitute(element))
if (!inherits(element, "gpar")) {
if (inherits(element, "list") && (inherits(element[[1]],
"gpar") || (inherits(element[[1]], "list") &&
inherits(element[[1]][[1]], "gpar")))) {
if (inherits(element[[1]], "gpar")) {
ret <- lapply(element, function(x, l1) prGparMerge(l1,
x), l1 = ret)
attr(ret, "txt_dim") <- 1
default_element <- ret[[1]]
}
else {
el_len <- sapply(element, length, USE.NAMES = FALSE)
if (any(el_len != el_len[1]))
stop("It seems that you haven't provided a square list",
" for '", name, "'", ", ie all rows have the same number of elements.",
" Currently the list lengths are:",
" '", paste(el_len, collapse = "', '"),
"'")
ret <- lapply(element, function(l) {
lapply(l, function(x, l1) prGparMerge(l1,
x), l1 = ret)
})
attr(ret, "txt_dim") <- 2
default_element <- ret[[1]][[1]]
}
}
else {
stop("You can only provide arguments from gpar() or a 1-2 dimensional list of gpars to the function")
}
}
else {
ret <- prGparMerge(ret, element)
attr(ret, "txt_dim") <- 0
default_element <- ret
}
attr(ret, "ref") <- default_element
return(ret)
}
ret <- list()
ret$label <- list(fontface = "plain", cex = cex)
attr(ret$label, "ref") <- ret$label
attr(ret$label, "txt_dim") <- 0
if (!missing(label)) {
ret$label <- prGparMergeMultiLevel(ret$label, label)
}
ret$summary <- prGparMerge(attr(ret$label, "ref"),
list(fontface = "bold", cex = attr(ret$label, "ref")$cex *
1.1))
attr(ret$summary, "ref") <- ret$summary
attr(ret$summary, "txt_dim") <- 0
if (!missing(summary)) {
ret$summary <- prGparMergeMultiLevel(ret$summary, summary)
}
ret$title <- prGparMerge(attr(ret$label, "ref"), list(fontface = "plain",
cex = attr(ret$label, "ref")$cex * 1.2, just = "center"))
if (!missing(title)) {
if (class(title) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$title <- prGparMerge(ret$title, title)
}
ret$xlab <- prGparMerge(attr(ret$label, "ref"), list(cex = attr(ret$label,
"ref")$cex * 0.6))
if (!missing(xlab)) {
if (class(xlab) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$xlab <- prGparMerge(ret$xlab, xlab)
}
ret$ticks <- prGparMerge(attr(ret$label, "ref"), list(cex = attr(ret$label,
"ref")$cex * 0.5))
if (!missing(ticks)) {
if (class(ticks) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$ticks <- prGparMerge(ret$ticks, ticks)
}
ret$legend <- prGparMerge(attr(ret$label, "ref"), list(cex = attr(ret$label,
"ref")$cex * 0.8))
attr(ret$legend, "ref") <- ret$legend
attr(ret$legend, "txt_dim") <- 0
if (!missing(legend)) {
if (class(legend) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$legend <- prGparMergeMultiLevel(ret$legend, legend)
}
ret$legend.title <- prGparMerge(attr(ret$label, "ref"),
list(fontface = "bold", cex = attr(ret$label, "ref")$cex *
1.1))
if (!missing(legend.title)) {
if (class(legend.title) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$legend.title <- prGparMerge(ret$legend.title, legend.title)
}
return(structure(ret, class = c("fpTxtGp", class(ret))))
}
forestplot(tabletext,
cochrane_from_rmeta,new_page = TRUE,
is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
clip=c(0.1,2.5),
xlog=TRUE,
col=fpColors(box="royalblue",line="darkblue", summary="royalblue"),
txt_gp = fpTxtGp(label = gpar( font="plain"))) # doesnt work
Error in prGparMerge(ret, element) :
could not find function "prGparMerge"
In addition: Warning message:
In validGP(list(...)) :
Error in prGparMerge(ret, element) :
could not find function "prGparMerge"
fpTxtGp现在我已经将标题更改为plain。但是我得到一个错误,它找不到函数“prGarMerge”,该函数中的另一个函数。有办法将代码转换为prGarMerge吗
fpTxtGp <- function (label, summary, xlab, title, ticks, legend, legend.title,
cex = 1)
{
prGparMergeMultiLevel <- function(ret, element) {
name <- deparse(substitute(element))
if (!inherits(element, "gpar")) {
if (inherits(element, "list") && (inherits(element[[1]],
"gpar") || (inherits(element[[1]], "list") &&
inherits(element[[1]][[1]], "gpar")))) {
if (inherits(element[[1]], "gpar")) {
ret <- lapply(element, function(x, l1) prGparMerge(l1,
x), l1 = ret)
attr(ret, "txt_dim") <- 1
default_element <- ret[[1]]
}
else {
el_len <- sapply(element, length, USE.NAMES = FALSE)
if (any(el_len != el_len[1]))
stop("It seems that you haven't provided a square list",
" for '", name, "'", ", ie all rows have the same number of elements.",
" Currently the list lengths are:",
" '", paste(el_len, collapse = "', '"),
"'")
ret <- lapply(element, function(l) {
lapply(l, function(x, l1) prGparMerge(l1,
x), l1 = ret)
})
attr(ret, "txt_dim") <- 2
default_element <- ret[[1]][[1]]
}
}
else {
stop("You can only provide arguments from gpar() or a 1-2 dimensional list of gpars to the function")
}
}
else {
ret <- prGparMerge(ret, element)
attr(ret, "txt_dim") <- 0
default_element <- ret
}
attr(ret, "ref") <- default_element
return(ret)
}
ret <- list()
ret$label <- list(fontface = "plain", cex = cex)
attr(ret$label, "ref") <- ret$label
attr(ret$label, "txt_dim") <- 0
if (!missing(label)) {
ret$label <- prGparMergeMultiLevel(ret$label, label)
}
ret$summary <- prGparMerge(attr(ret$label, "ref"),
list(fontface = "bold", cex = attr(ret$label, "ref")$cex *
1.1))
attr(ret$summary, "ref") <- ret$summary
attr(ret$summary, "txt_dim") <- 0
if (!missing(summary)) {
ret$summary <- prGparMergeMultiLevel(ret$summary, summary)
}
ret$title <- prGparMerge(attr(ret$label, "ref"), list(fontface = "plain",
cex = attr(ret$label, "ref")$cex * 1.2, just = "center"))
if (!missing(title)) {
if (class(title) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$title <- prGparMerge(ret$title, title)
}
ret$xlab <- prGparMerge(attr(ret$label, "ref"), list(cex = attr(ret$label,
"ref")$cex * 0.6))
if (!missing(xlab)) {
if (class(xlab) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$xlab <- prGparMerge(ret$xlab, xlab)
}
ret$ticks <- prGparMerge(attr(ret$label, "ref"), list(cex = attr(ret$label,
"ref")$cex * 0.5))
if (!missing(ticks)) {
if (class(ticks) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$ticks <- prGparMerge(ret$ticks, ticks)
}
ret$legend <- prGparMerge(attr(ret$label, "ref"), list(cex = attr(ret$label,
"ref")$cex * 0.8))
attr(ret$legend, "ref") <- ret$legend
attr(ret$legend, "txt_dim") <- 0
if (!missing(legend)) {
if (class(legend) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$legend <- prGparMergeMultiLevel(ret$legend, legend)
}
ret$legend.title <- prGparMerge(attr(ret$label, "ref"),
list(fontface = "bold", cex = attr(ret$label, "ref")$cex *
1.1))
if (!missing(legend.title)) {
if (class(legend.title) != "gpar")
stop("You can only provide arguments from gpar() to the function")
ret$legend.title <- prGparMerge(ret$legend.title, legend.title)
}
return(structure(ret, class = c("fpTxtGp", class(ret))))
}
forestplot(tabletext,
cochrane_from_rmeta,new_page = TRUE,
is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
clip=c(0.1,2.5),
xlog=TRUE,
col=fpColors(box="royalblue",line="darkblue", summary="royalblue"),
txt_gp = fpTxtGp(label = gpar( font="plain"))) # doesnt work
Error in prGparMerge(ret, element) :
could not find function "prGparMerge"
In addition: Warning message:
In validGP(list(...)) :
Error in prGparMerge(ret, element) :
could not find function "prGparMerge"
fpTxtGp谢谢!我对这个问题的回答是,现在的问题是它找不到另一个函数。当我写它的名字时,这个函数的代码没有显示出来,就像在fpTxtGp中一样……有没有办法解决这个问题?谢谢!我对这个问题的回答是,现在的问题是它找不到另一个函数。a当我写函数名时,该函数的代码没有显示出来,就像在fpTxtGp中一样……有没有办法解决这个问题?你只需要在函数前面加上forestplot::
,比如forestplot:::prGarMerge
。有时包导出的函数调用包不导出的函数。在这种情况下,你可以使用::
访问运算符您只需要使用forestplot::
作为该函数的前缀,就像forestplot:::prGarMerge
一样。有时包导出的函数调用包不导出的函数。在这种情况下,您可以使用:
访问运算符