我有一个server.R文件,格式如下:
shinyServer(
function(input, output, session) {
mydata<- reactive({
df<- dataframe1
variable1
variable2
list(df, variable1, variable2)
})
output$plot<- renderPlot({
p<-ggplot(mydata()$df, aes(y=V8, x = 1:nrow(mydata()$df), fill = V8))
print(p)
})
})
我的问题是调用ggplot,虽然它似乎识别mydata $ df(),但它返回错误
nrow中的错误(mydata()$ df):找不到函数“mydata”。
我不确定我的语法错在哪里。任何人都能解释一下吗?谢谢!
答案 0 :(得分:1)
据我所知,反应性闪亮物体不适合列表。因为看起来你没有使用'variable1'和'variable2'只是省略它们而只是做数据帧(我假设它是全局可访问的并且没有导入?)。它也可以简单地在ggplot调用之前调用被动反应,但如果不使用那些额外的变量,我就会变得简单。一个非常简单的例子:
runApp(
list(ui = basicPage(
h1('Demo Shiny'),
plotOutput("plot")
)
,server = function(input, output) {
mydata <- reactive({
dataframe1 <- data.frame(cond = rep(c("A", "B"), each=10),
xvar = 1:20 + rnorm(20,sd=3),
yvar = 1:20 + rnorm(20,sd=3))
dataframe1
})
output$plot = renderPlot({
df <- mydata()
p<-ggplot(df, aes(x=xvar, y = yvar)) + geom_point()
print(p)
})
})
)
答案 1 :(得分:0)
我将无耻地窃取大部分@charles代码,但我认为这种情况下的问题实际上是你的aes()
。这似乎有效
runApp(
list(ui = basicPage(
h1('Demo Shiny'),
plotOutput("plot")
)
,server = function(input, output) {
mydata <- reactive({
df <- data.frame( V8=sample(1:4, 20, replace=T))
list(df=df, variable1=1, variable2=2)
})
output$plot = renderPlot({
p<-ggplot(mydata()$df, aes(x=seq_along(V8), y = V8)) + geom_point()
print(p)
})
})
)
问题是你的aes中的变量是你传递给ggplot2的data.frame中没有的。这里通过确保从df中包含一个适当的变量,我们似乎没问题。