gpt4 book ai didi

r - 什么是 “object of type ‘closure’ is not subsettable” 在 Shiny 中的错误?

转载 作者:行者123 更新时间:2023-12-04 01:28:51 28 4
gpt4 key购买 nike

我有一个 Shiny 的应用程序,当我运行它时,我收到一条错误消息,提示 object of type ‘closure’ is not subsettable .那是什么,我该如何解决?

备注 :我写了这个问题,因为这个问题经常出现,而且可能的骗子不是 shiny相关或如此具体以至于答案是否广泛适用并不明显。

最佳答案

另见 this question它涵盖了非 Shiny 上下文中的此错误。

如何解决此问题:

这是 Shiny 应用程序中非常常见的错误。当您创建诸如 list 之类的对象时,通常会出现这种情况。 , data.framevector使用 reactive()函数——也就是说,你的对象对某种输入使用react。如果你这样做,当你之后引用你的对象时,你必须包括括号。

例如,假设你做了一个响应式(Reactive) data.frame像这样:

MyDF<-reactive({ code that makes a data.frame with a column called “X” })

如果您想引用 data.frame你叫它 MyDFMyDF$X你会得到错误。相反,它应该是 MyDF()MyDF()$X您需要对使用 reactive() 创建的任何对象使用此命名约定。 .

为什么会发生这种情况:

当你创建一个 react 对象时,比如 data.frame , 使用 reactive()很容易把它想象成任何其他非响应式(Reactive) data.frame并相应地编写代码。但是,您创建的并不是真正的 data.frame.相反,你所做的是 指令,以函数形式 ,其中讲述了如何制作 data.frame需要的时候。当您希望实际使用此函数来获取 data.frame 时你必须使用括号,就像你在 R 中使用任何其他函数一样。如果你忘记使用括号,R 会认为你正在尝试使用函数的一部分并给你错误。尝试输入:
plot$x

在命令行中,您将收到相同的错误。

当您的应用程序启动时,您可能不会立即看到此错误。响应式(Reactive)对象具有所谓的“惰性”评估。直到某些输出需要它们时才会对它们进行评估。所以如果你的 data.frame仅用于制作情节, data.frame在用户第一次看到情节之前不会存在。如果应用程序启动时用户需要单击按钮或更改选项卡以查看绘图,则 data.frame 的代码在发生这种情况之前不会进行评估。一旦发生这种情况,那么 Shiny 将使用输入的当前值来运行构建 data.frame 的函数。需要制作情节。如果你忘记使用括号,这时候 Shiny 会给你错误。请注意,如果输入发生变化,但用户并未查看绘图,则该函数会生成 data.frame在用户再次查看绘图之前不会重新运行。

关于r - 什么是 “object of type ‘closure’ is not subsettable” 在 Shiny 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623749/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com