在动态创建 ui 元素 ( shiny.tag
, shiny.tag.list
, ...) 时,我经常发现很难将它与我的代码逻辑分开,并且通常最终会出现一堆令人费解的嵌套tags$div(...)
,混合了循环和条件语句。虽然看起来令人讨厌和丑陋,但它也容易出错,例如在更改 html 模板时。
假设我有以下数据结构:
my_data <- list(
container_a = list(
color = "orange",
height = 100,
content = list(
vec_a = c(type = "p", value = "impeach"),
vec_b = c(type = "h1", value = "orange")
)
),
container_b = list(
color = "yellow",
height = 50,
content = list(
vec_a = c(type = "p", value = "tool")
)
)
)
Run Code Online (Sandbox Code Playgroud)
如果我现在想将此结构推送到 ui-tags 中,我通常会得到如下结果:
library(shiny)
my_ui <- tagList( …
Run Code Online (Sandbox Code Playgroud) 安装新版本的 Shiny (1.4.0) 包后,我遇到一个奇怪的错误消息
> Warning: Error in writeImpl: Text to be written must be a length-one
> character vector [No stack trace available]
Run Code Online (Sandbox Code Playgroud)
我真的不明白有什么变化?以及如何解决这个问题?
任何想法将不胜感激!
跟踪如下所示:
13: execCallbacks(timeoutSecs, all, loop$id)
12: force(expr)
11: with_loop(loop, invisible(execCallbacks(timeoutSecs, all, loop$id)))
10: run_now(timeoutMs/1000, all = FALSE)
9: service(timeout)
8: serviceApp()
7: ..stacktracefloor..(serviceApp())
6: withCallingHandlers(expr, error = doCaptureStack)
5: domain$wrapSync(expr)
4: promises::with_promise_domain(createStackTracePromiseDomain(),
expr)
3: captureStackTraces({
while (!.globals$stopped) {
..stacktracefloor..(serviceApp())
}
})
2: ..stacktraceoff..(captureStackTraces({
while (!.globals$stopped) {
..stacktracefloor..(serviceApp())
}
}))
1: runApp("Projects/Bomboleo")
No traceback available
Run Code Online (Sandbox Code Playgroud) 我使用以下代码创建了一个交互式可视化:
library(networkD3)
nodes = data.frame("name" = c("node1", "node2","node3", "node4", "node5", "node6", "node7"))
links = as.data.frame(matrix(c(
0,1,7937,
0,2,6990,
0,3,2483,
1,4,2120,
2,4,666,
3,4,282,
1,5,4583,
2,5,5657,
3,5,731,
1,6,1234,
2,6,756,
3,6,1470), byrow = TRUE, ncol = 3))
names(links) = c("source", "target", "value")
sankey <- sankeyNetwork(Links = links, Nodes = nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
fontSize= 12, nodeWidth = 15)'
Run Code Online (Sandbox Code Playgroud)
这是我第一次使用 networkD3 包(或任何与此相关的交互式包),并且通过玩弄我发现为了保持它的交互性,它必须作为网页发布(或者有其他方式吗??)但是查看包的文档我看不到添加标题或标题/评论的方法。我想分享这一轮工作,所以需要在发布的网页上解释每个级别的理想含义
我的 css 技能非常有限,但假设以下示例:
sketch = htmltools::withTags(table(
class = 'display',
thead(
tr(
th(rowspan = 2, 'Species'),
th(colspan = 2, 'Sepal'),
th(colspan = 2, 'Petal')
),
tr(
lapply(rep(c('Length', 'Width'), 2), th)
)
)
))
datatable(head(iris, 10),
container = sketch, options = list(
initComplete = JS(
"function(settings, json) {",
"$(this.api().table().header()).css({'background-color': '#000', 'color': '#fff'});",
"}")
))
Run Code Online (Sandbox Code Playgroud)
我怎么会改变颜色编码的前两个列标题为蓝色的说,这样的列标题,两排Sepal,Length
和Sepal,Width
是蓝色的,但保留作为另一种颜色以下结构Petal,Length
和Petal,Width
在 Stephane 的初步回答之后,我添加了一个示例。
在JS中这似乎是可能的。
添加带有URL的独立弹出窗口很容易:
library(leaflet)
content <- paste(sep = "<br/>",
"<b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b>"
)
leaflet() %>% addTiles() %>%
addPopups(-122.327298, 47.597131, content,
options = popupOptions(closeButton = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
添加标记时也很简单,当单击该标记时,将在弹出窗口中提供一个URL:
leaflet() %>% addTiles() %>%
addMarkers(-122.327298, 47.597131, popup = content,
options = popupOptions(closeButton = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
也许有一些习惯传递给传单了...
吗?
最后,自定义JS函数如何为每个地图标记显示不同的URL?考虑示例data.frame:
df <- data.frame(url = c("/sf/ask/tagged/python/",
"/sf/ask/tagged/r/")),
lng = c(-122.327298, -122.337298),
lat = c(47.597131,47.587131))
Run Code Online (Sandbox Code Playgroud)
* 之前曾有人问过这个问题,但我在这里再问一个问题,并举一个最小的,可复制的例子。
我通过使用ggplotly()
和htmltools函数(例如h3()
和)创建各种对象来创建html文档html()
。然后,我将它们作为列表提交htmltools::save_html()
以创建html文件。
我想将ggplot图表直接添加为图像,而不是附加所有杂乱无章的钟声。最后,我将创建一个自包含的html文件(无依赖项),而内容丰富的工作会使该文件过大。
是否有一些将ggplot对象转换为html类型对象的函数?还是我必须将ggplot保存为.png文件,然后将.png文件读入我添加到save_html()函数列表中的某个对象中?
我的R代码如下所示:
library("tidyverse")
library("plotly")
library("htmltools")
HTMLOut <- "c:/Users/MrMagoo/My.html")
df <- data.frame(x=1:25, y=c(1:25*1:25))
g7 <- ggplot(df,aes(x=x, y=y)) + geom_point()
p7 <- ggplotly(g7) # I would like to use something other than ggplotly here. Just capturing the ggplot as an image would be fine.
# create other objects to add to the html file
t7 <- h2(id="graph7", "Title for graph #7")
d7 <- p("description of graph 7")
save_html(list(t7, p7, d7), HTMLOut)
# …
Run Code Online (Sandbox Code Playgroud) 我有兴趣为使用NetworkD3创建的forceNetwork图表添加标题,并使用magrittr导出html.
在R:HTML Tag Object帮助页面中找到了一个解决方案,以便添加标题.然后我被指示browsable()
在"更改networkD3情节的背景颜色" StackOverflow问题中添加htmltool 参数- 来自@timelyportfolio的回答.
下面我提供了一个最小的工作示例,用于添加标题,然后保存没有标题的网络,最后我的非工作尝试将两者结合起来.
library(networkD3)
library(htmltools)
# Load data
data(MisLinks)
data(MisNodes)
# Plot with title in R Viewer
browsable(
tagList(
tags$h1("Title"),
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8)
)
)
Run Code Online (Sandbox Code Playgroud)
虽然我可以使用magrittr保存没有标题%>%
:
library(magrittr)
# Plot and save to Mis.html
forceNetwork(Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target", …
Run Code Online (Sandbox Code Playgroud) 我有关于船只/船只的位置以及它们所转向的路线的信息。我想将它们绘制在带有看起来像船的自定义图标的传单地图上。我发现"tags"
图标 fromglyphicons
是最合适的。这里有一些数据可以玩:
dput(head(x))
structure(list(boatName = c("Conti Benguela", "Sunny Bay", "Sunny Horizon",
"FMT URLA", "Qi Xiang 22", "STI Solidarity"), lat = c(37.115365,
38.4772017, 14.632, 56.80515, 51.31172, -2.2783283), lon = c(15.2682183,
-8.7888783, -79.5806667, 7.601885, -143.5678933, 46.6328383),
cog = c("16", "331", "182", "21", "288", "72")), row.names = c(NA,
6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
cog
指示地面上的路线,图标转换为旋转角度。我正在使用以下代码当前绘制船只的位置和根据船只转向的路线旋转:
shipIcon <- makeAwesomeIcon("tag",iconRotate = x$cog)
leaflet() %>% addTiles() %>%
addAwesomeMarkers(lng=x$lon,lat=x$lat,icon=shipIcon,popup = x$boatName)
Run Code Online (Sandbox Code Playgroud)
但是,如您所见,makeAwesomeIcon
为我不想要的图标添加了一个背景标记。我已经看过this和this,后者正是我想要做的。我怎样才能完成我的任务,即根据它在没有标记背景的情况下转向的路线显示带有旋转的自定义船舶图标?
我想包括覆盖内联代码的外部降价文件。当我在 RStudio 上点击 Knit 时,它确实只显示代码文本,而不是 sys.time 的实际值。如果我将about.md的内容放入main.Rmd中,就没有问题。该点应该与 includeMarkdown 相关,但除了路径之外不带任何参数。有什么建议 ?提前致谢
主.Rmd
---
title: "test"
author: "test"
output:
flexdashboard::flex_dashboard:
orientation: rows
social: menu
vertical_layout: fill
---
```{r}
htmltools::includeMarkdown('about.md')
```
Run Code Online (Sandbox Code Playgroud)
关于.md
Today is `r format(Sys.time(), "%d %B %A %Y")`
Run Code Online (Sandbox Code Playgroud)
电流输出
Today is r format(Sys.time(), "%d %B %A %Y")
Run Code Online (Sandbox Code Playgroud) 这会有点罗嗦,因为如果没有适当的上下文,我不知道如何提出我的问题。
没有过多介绍细节,在我的summarytools
包中,我by()
通过使用包装函数来处理对象print.summarytools
,即view()
. 此view()
函数可以识别通过by
或创建的对象lapply()
,并将其组件分派到包的print()
,以及与标题和脚注相关的适当参数,等等(第一个元素不会接收与第二个或最后一个相同的参数)。
链接到包开发页面:
该软件包提供了两种呈现内容的方式:通过 rmarkdownpander
和使用 RStudio 的htmltools
. 就rmarkdown/pander而言,我取得了令人满意的结果。对于 rmarkdown 文档中的 HTML 渲染,情况并非如此。
library(devtools)
install_github("dcomtois/summarytools", ref = "dev-current")
library(summarytools)
# call the descr() function through by() to get stats by gender
groupstats <- by(data = exams, INDICES = exams$gender, FUN = descr)
# Use the view() function to neatly display results
view(groupstats, method = 'render')
Run Code Online (Sandbox Code Playgroud)
此示例可作为github 上的 …
我正在使用 R 传单包生成地图。创建网页时,将网页的<title>
元素设置为“leaflet”:
<title>leaflet</title>
Run Code Online (Sandbox Code Playgroud)
我想将其更改为内容更丰富的内容,但我看不出有什么方法可以做到这一点。我看过这里的讨论,但那是在地图本身上添加标题。我想做一些不同的事情:设置显示在浏览器选项卡顶部的标题。
有没有一种简单的方法可以使用传单或 htmltools 来做到这一点?
我正在尝试使用以下命令启动一个闪亮的应用程序。
Rscript -e "shiny::runApp('test-app', launch.browser=TRUE)"
Run Code Online (Sandbox Code Playgroud)
但是,我收到如下错误
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
namespace 'htmltools' 0.4.0 is being loaded, but >= 0.4.0.9003 is required
Calls: :: ... getNamespace -> loadNamespace -> namespaceImport -> loadNamespace
Execution halted
Run Code Online (Sandbox Code Playgroud)
我确实检查了我的库文件夹并看到该htmltools
包存在。
我也尝试过以下dependencies=TRUE
install.packages(pkgs,lib = "C:/Users/User/Desktop/data/library",repo = "https://cloud.r-project.org",dependencies=TRUE)
Run Code Online (Sandbox Code Playgroud)
这里的 pkgs 是一个包含必须安装的软件包列表的列表。
问题是相同的脚本在我的系统中工作,但在我同事的系统中不起作用。我该如何解决这个问题?
可以帮助我了解问题所在吗?
htmltools ×12
r ×11
htmlwidgets ×4
shiny ×4
leaflet ×3
knitr ×2
networkd3 ×2
r-markdown ×2
css ×1
d3.js ×1
dt ×1
ggplot2 ×1
inline ×1
javascript ×1
shinyapps ×1
summarytools ×1
templating ×1