我有这样的代码
myfx <- reactive({
req(
isTruthy(input$value),
isTruthy(data1()) || isTruthy(data2())
)
...
if(exists(data2())) {
# do some stuff
}
## do this other stuff regardless
})
if(exists())
是我的难点所在。Exists不是这里的正确函数,validate(need(data2()))
也不起作用。如果存在可选的reactive之一(来自至少需要一个的组),我如何有条件地执行一些代码?
EDIT 1:要明确问题,请参见下面调试打印所示的问题:
myfx <- reactive({
req(
isTruthy(input$value),
isTruthy(data1()) || isTruthy(data2())
)
print("I am printed, and data2() has not been uploaded by user")
print(isTruthy(data2()))
print("I am never printed")
if(isTruthy(data2())) {
# do some stuff
}
## do this other stuff regardless
})
**编辑2:**好的,我知道原因了,我也知道我在第一次req()
调用中没有观察到行为,因为短路(||),但现在我陷入了如何实现我想要的行为的困境,基本上我不会计算数据2()直到用户上传了一些内容(这里也使用req()
)。这就是这个挂在那里的地方。但是如果我把req()
从这个顶部移走,然后我得到错误,因为我试图工作在不存在的输入。请参阅下面的data2()的定义。我该如何修复这个问题?
data2 <- reactive({
req(input$data2)
read.csv(input$data2$datapath) %>%
as_tibble() %>%
return()
})
3条答案
按热度按时间qqrboqgw1#
您可以重用
isTruthy
,因为它对于0行仍然返回true,所以您可能需要添加一个非零行计数检查:或者,您可以在
try
/tryCatch
中捕获该尝试并做出相应的React:pw9qyyiw2#
好了,这是最终的解决方案。
wgxvkvu93#
1.通过检查行数,如果dat2不存在,则引发错误
1.如果dat2不存在,chk将变为NULL
1.在if语句中使用chk来确定要做什么