r - lapply in 三点构造函数
问题描述
我正在尝试在用户定义函数的 3 点构造上实现 lapply。不知何故,它不工作。
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>"))
))
}
横幅('T1','T2','T3',潜台词 = '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
推荐阅读
- c - C- 使用内核模块显示 CPU 信息
- javascript - 尽管存在路线,但未捕获 JADE 表单提交
- .htaccess - mod_rewrite 规则 htaccess 未按预期工作
- bash - 在值之间查找多个字符串并在bash中用换行符替换
- ruby-on-rails - Rails 方法而不是模型的 has_many 中的 id
- regex - 正则表达式等于或高于 125233000
- javascript - 更新 observable 中的值而不解析先前的运算符
- java - 当我在我的 android mobile samsung j7 prime 上运行 android 项目时,手机无法授予权限
- ionic-framework - 通过 Ionic 向 Web API 发送多条记录
- javascript - 无法使用 Laravel Mix 访问 Vue 组件中的 js-cookie