当我在代码下面运行时出现此错误,任何人都可以告诉我如何克服此错误。 下面是mydata是主要数据集的代码,我使用下面的代码创建了一个闪亮的仪表板。 我尝试将其中一个列作为URL,但它在标题中显示错误。
我尝试提供数据()$ IFX_USERNAME,因为在他的闪亮应用程序中是一个非常常见的错误。当您使用reactive()函数创建一个对象(如list,data.frame或vector)时,通常会出现这种情况 - 也就是说,您的对象会对某种输入做出反应。如果这样做,当您之后引用对象时,必须包括括号。
例如,假设您创建了一个反应性数据框架,如下所示:
MyDF< -reactive({使用名为“X”的列生成data.frame的代码}) 如果您希望引用data.frame并将其称为MyDF或MyDF $ X,则会出现错误。相反,它应该是MyDF()或MyDF()$ X您需要使用此命名约定与您使用reactive()创建的任何对象,即使它显示相同的错误
library("shiny")
library("datasets")
library("DT")
library("shinyBS")
library(tidyr)
lapply( dbListConnections( dbDriver( drv = "MySQL")), dbDisconnect)
#connecting to database
dbListTables(mydb)
dbListFields(mydb, 'DL_COMMUNITY')
rs = dbSendQuery(mydb, "select * from DL_COMMUNITY")
mydatabase=fetch(rs)
setDT(mydatabase)
colnames(mydatabase)
header <- dashboardHeader()
ui = shinyUI(fluidPage(
DT::dataTableOutput("mtcarsTable"),
bsModal("mtCarsModal", "My Modal", "",dataTableOutput('mytext'), size = "large")
))
on_click_js = "
Shiny.onInputChange('mydata', '%s');
$('#mtCarsModal').modal('show')
"
on_click_js1 = "
Shiny.onInputChange('mydata', '%s');
$('#mtcarsTable').modal('show')
"
convert_to_link = function(x) {
as.character(tags$a(href = "#", onclick = sprintf(on_click_js,x), x))
}
convert_to_link1 = function(x) {
as.character(tags$a(href = "#", onclick = sprintf(on_click_js1,x), x))
}
shinyApp(
ui = ui,
server = function(input, output, session) {
mtcarsLinked <- reactive({
mydatabase$IFX_USERNAME <- sapply(
mydatabase$IFX_USERNAME,convert_to_link)
return(mydatabase)
})
**linked <- reactive({
myd$TEAM_MEMBERS <- sapply(
myd$TEAM_MEMBERS,convert_to_link1)
return(myd)
})**
output$mtcarsTable <- DT::renderDataTable({
DT::datatable(mtcarsLinked(),
class = 'compact',
escape = FALSE, selection='none'
)
})
output$mytext = DT::renderDataTable({
#userQuery=paste("select PROJECT,COMMENT from DL_COMMUNITY where IFX_USERNAME = '",user,"'",sep="")
#rs = dbSendQuery(mysqlCon,userQuery)
userQuery=paste("SELECT *
from Heatmap.DL_PROJECT where CONCAT(',', TEAM_MEMBERS, ',') like '%,sa,%'
or PROJECT_OWNER like '%,sa,%'
or PROJECT_LEAD like '%,sa,%'")
rs = dbSendQuery(mydb,userQuery)
myd=fetch(rs,n=-1)
myd<-data.frame(myd)
myd$TEAM_MEMBERS<- as.list(strsplit(myd$TEAM_MEMBERS, ","))
#myd<-myd %>%
#mutate(TEAM_MEMBERS = strsplit(as.character(TEAM_MEMBERS), ",")) %>%
#unnest(TEAM_MEMBERS)
#setDT(myd)
#hello <- input$mydata
#myd<-mydatabase[mydatabase$IFX_USERNAME==input$mydata,]
#myd1<-t(myd)
DT::datatable(linked(),
class='compact',
escape = FALSE,selection = 'none')
})
}
)
答案 0 :(得分:0)
首先,在调用反应函数时始终使用my_reactive()
,例如my_reactive
。
其次,object of type closure not subsettable
通常意味着无法找到您想要子集的对象(此处带有$)。您没有object not found
错误,因为您已经为其命名了
与jogo的示例一样,尝试子集mean
时也会出现相同的错误。 mean
是R中的一个对象,因此它存在,R不会返回object not found
,但它是一个函数,你不能从中进行子集,因此错误object is not subsettable
。
比较以下代码行的结果。
mean[1]
mean <- c(1, 3)
mean[1]
另请注意,R仍然可以使用mean
来执行数字向量的均值,因为它知道何时查找函数或其他内容。但强烈建议不要这样做。您应始终使用有意义的名称正确命名对象。