lapply 三点构造函数
lapply in three dots construct in function
我正在尝试实现 lapply 超过 3 个点的用户定义函数构造。不知何故它不起作用。
banner <- function(maintext,..., subtext = NULL) {
if(length(list(...)) > 0) {
dots <- lapply(X = list(...), FUN = function(x) tags$div(x))
} else {
dots <- ''
}
HTML(paste0(
"<div class='bannerbackground'> <h2>", maintext, "</h2>",
# If subtext specified
ifelse(!is.null(subtext), paste0("<span>", subtext, "</span>", dots, "</div>"), paste0(dots, "</div>"))
))
}
banner('T1', 'T2', 'T3', subtext = 'T4')
我期待的输出
<div class='bannerbackground'> <h2>T1</h2><span>T4</span>
<div>T2</div>
<div>T3</div>
</div>
你使用点没有错。您的问题是试图将 html 标签列表传递给 paste
函数。由于您最终要构建一个字符串,因此需要将它们转换为字符并作为向量而不是列表粘贴。因此你想要 sapply
而不是 lapply
:
banner <- function(maintext,..., subtext) {
dots <- if(length(list(...))) sapply(list(...), function(x) as.character(tags$div(x)))
else character()
dots <- paste0(" ", dots, "\n", collapse = "")
subtext <- if(!missing(subtext)) paste0(" <span>", subtext, "</span>\n") else ""
HTML(paste0("<div class='bannerbackground'>\n <h2>",
maintext,
"</h2>\n",
subtext,
dots,
"</div>\n")
)
}
这提供了格式良好的输出:
banner('T1', 'T2', 'T3', subtext = 'T4')
#> <div class='bannerbackground'>
#> <h2>T1</h2>
#> <span>T4</span>
#> <div>T2</div>
#> <div>T3</div>
#> </div>
顺便说一下,我已经将 is.null
更改为 missing
我正在尝试实现 lapply 超过 3 个点的用户定义函数构造。不知何故它不起作用。
banner <- function(maintext,..., subtext = NULL) {
if(length(list(...)) > 0) {
dots <- lapply(X = list(...), FUN = function(x) tags$div(x))
} else {
dots <- ''
}
HTML(paste0(
"<div class='bannerbackground'> <h2>", maintext, "</h2>",
# If subtext specified
ifelse(!is.null(subtext), paste0("<span>", subtext, "</span>", dots, "</div>"), paste0(dots, "</div>"))
))
}
banner('T1', 'T2', 'T3', subtext = 'T4')
我期待的输出
<div class='bannerbackground'> <h2>T1</h2><span>T4</span>
<div>T2</div>
<div>T3</div>
</div>
你使用点没有错。您的问题是试图将 html 标签列表传递给 paste
函数。由于您最终要构建一个字符串,因此需要将它们转换为字符并作为向量而不是列表粘贴。因此你想要 sapply
而不是 lapply
:
banner <- function(maintext,..., subtext) {
dots <- if(length(list(...))) sapply(list(...), function(x) as.character(tags$div(x)))
else character()
dots <- paste0(" ", dots, "\n", collapse = "")
subtext <- if(!missing(subtext)) paste0(" <span>", subtext, "</span>\n") else ""
HTML(paste0("<div class='bannerbackground'>\n <h2>",
maintext,
"</h2>\n",
subtext,
dots,
"</div>\n")
)
}
这提供了格式良好的输出:
banner('T1', 'T2', 'T3', subtext = 'T4')
#> <div class='bannerbackground'>
#> <h2>T1</h2>
#> <span>T4</span>
#> <div>T2</div>
#> <div>T3</div>
#> </div>
顺便说一下,我已经将 is.null
更改为 missing