我不知道为什么从自定义函数传递参数不起作用group_by
。我只是传递colName
来自数据集的数据,当我运行自己的函数时,会出现错误:必须按 .data 中找到的变量进行分组。未找到列“colName”。在下面的示例中,我使用quakes
R 环境中可用的数据集:
foo <- function(data, colName) {
result <- data %>%
group_by(colName) %>%
summarise(count = n())
return(result)
}
foo(quakes, "stations")
# I also tried passing w/o commas but it is not working too:
# foo(quakes, stations)
Run Code Online (Sandbox Code Playgroud)
我注意到,当我显式传递列名称时,group_by
它会起作用:
group_by(stations) %>%
Run Code Online (Sandbox Code Playgroud)
但是,在函数中对列名称进行硬编码是没有意义的。
我需要向地图上的每个现有标记添加标签(不是弹出窗口)。我创建了labelText
存储标签 HTML 的变量。现在,当我使用它时,奇怪的事情发生了 - 每个标签显示来自整个数据集的数据,而不是分配给单个点的数据:
library(shiny)
library(leaflet)
library(dplyr)
library(sf)
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output, session) {
coords <- quakes %>%
sf::st_as_sf(coords = c("long","lat"), crs = 4326)
labelText <- paste0("<b>Depth: </b>",coords$depth,"<br/>",
"<b>Mag: </b>",coords$mag,"<br/>",
"<b>Stations: </b>",coords$stations)
output$map <- leaflet::renderLeaflet({
leaflet::leaflet() %>%
leaflet::addTiles() %>%
leaflet::setView(172.972965,-35.377261, zoom = 4) %>%
leaflet::addCircleMarkers(
data = coords,
stroke = FALSE,
radius = 6,
label = ~htmltools::HTML(labelText)
#label = ~htmltools::htmlEscape(labelText)
#label = ~labelText
)
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
我尝试了HTML
和的不同组合htmlEscape …
我编写了一个golem
应用程序并想将其部署在shinyapp.io 上。不幸的是,每次我尝试这样做时都会出现以下错误(在日志中):
loadSupport(appDir, renv = sharedEnv, globalrenv = NULL) 中的警告:正在为 Shiny 应用程序加载 R/ 子目录,但该目录似乎包含 R 包。在 R/ 中获取文件可能会导致意外行为。
与我的项目相关的所有文件都存储在我的golem
项目最初创建的一个目录中。我还检查了手动工作目录并将其设置为“R”文件夹(其中存储了 app_server 和 app_ui)。不幸的是,当我部署我的应用程序时,提到的错误再次出现。此外,每次我在 RStudio 中关闭项目时,我都会将工作区图像保存到“.RData”文件(该文件也存储在主目录中) - 也许这是一个问题(但我也尝试部署不包含该文件的文件)也失败)。我实在不知道问题出在哪里以及这个错误意味着什么。
有趣的是,常规(单个)app.R 可以毫无问题地部署在shinyapps 上。
我创建了一个新的 MVC 项目(简单模板),运行它,一切正常。但后来我更新了 NuGet 包,当我运行我的项目时,出现了错误:
System.NullReferenceException:未将对象引用设置到对象的实例
在调试模式下,此错误来自此行:
@Scripts.Render("~/bundles/bootstrap")
Run Code Online (Sandbox Code Playgroud)
我没有触及代码中的任何内容,只是更新了 NuGet 包。我的包看起来很标准,如下所示:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
}
Run Code Online (Sandbox Code Playgroud)
我已经安装了 Bootstrap,并且所有文件都位于正确的目录中(css inContent
和 js in Scripts
)。有趣的是,当我更改ScriptBundle
为Bundle
之后,它就开始工作了。无论如何,我认为这不是一个合适的解决方案,您有什么想法如何使其符合标准吗ScriptBundle
?
我在 Power Query 中创建了一个查询。我需要做的是在运行宏时刷新 PQ 并保存工作簿。我尝试使用各种宏来执行此操作,但它们都没有刷新查询。我在其他工作簿中使用这个宏 - 它打开给定的工作簿,“刷新”它(但实际上没有,因为它持续太短)并关闭。有趣的是,当我在 Excel 功能区上运行“全部刷新”时,PQ 会刷新(所有连接和查询)。然而,当我使用ActiveWorkbook.RefreshAll
then 时,它根本不会刷新 PQ。
下面是我的宏,其中有多种刷新 PQ 的方法:
Sub RefreshQuery()
Application.DisplayAlerts = False
File = "C:\Users\User1\Desktop\MyFile.xlsx"
Set MyWorkBook = Workbooks.Open(File)
ActiveWorkbook.Queries.FastCombine = True 'ignores privacy levels on all computers
'Refresh option #1
ActiveWorkbook.RefreshAll
'Refresh option #2
For Each cn In ActiveWorkbook.Connections
cn.Refresh
Next cn
'Refresh option #3
ActiveWorkbook.Connections("GetStatData").Refresh
'Refresh option #4
ActiveWorkbook.Connections("Query - GetStatData").Refresh
'Refresh option #5
ActiveWorkbook.Query("GetStatData").Refresh
ActiveWorkbook.Save
Application.Wait (Now + TimeValue("00:00:03"))
ActiveWindow.Close
End Sub
Run Code Online (Sandbox Code Playgroud)