仅在添加预先存在的数据后才始终删除闪亮的 CRUD 应用程序中的第一行

Deleting always the first row in a shiny CRUD app only after adding preexsitent data

我被困住了,需要帮助。

我正在使用这个要点https://gist.github.com/gluc/d39cea3d11f03542970b

基本上,在闪亮的应用程序中,它提供了进行 CRUD 操作的可能性,并且效果完美。

我现在设法将数据存储在 googlesheets 上,并通过以下方式加载数据: read_sheet 来自 googlesheets4 包的函数。

问题是如果我想删除 第一行 中 table 的 最后一行 删除按钮后被删除

仅当我加载预先存在的数据(在我的例子中来自 googlesheets)时才会出现此问题。 我遇到了问题:当我在闪亮的应用程序 table.

中单击行时,id 没有更新

我用过 browser() 并遍历了每个功能,但我找不到问题。

如果我单击第一行并删除第一行,一切正常,但单击第二行或除第一行以外的任何其他行,总是会删除第一行。

更新: 我认为主要问题是在从 gogglesheets 中读取数据后,禁用的 Id 字段未使用 table 导航,请参见图片。

如果我点击第 3 行,那么 Id 字段应该是 3,但它始终保持在 1。因此,对 table 的任何操作(例如删除)都会删除第一行。

我无法获取环境中开始时加载的数据帧与 CRUD 应用程序定义的数据之间的 link。 akrun 的想法是完美的,应该可行,但它没有:

我在代码的开头将 read_sheet(...) table 分配给如下响应:

df_id_read_sheet <- read_sheet("......")
responses <- df_id_read_sheet

一夜未眠。我找到了解决方案。它和我想的一样简单。按照亲爱的@akrun 的第一个建议,我检查了 str 加载的 googlesheet.

的结构

sheet 在将其转换为 data.frame 并分配给 responses 后导入为 tibble,完整代码按预期工作。出现问题是因为行名。

在将 sheet 分配给 responses 后立即使用 browser() 我能够在我的控制台上看到并检查 shiny 应用程序中的结构。

我真的很喜欢使用 broswer() 进行调试,因为它也能让我看到闪亮的应用程序中发生了什么。

这是一个简单但很难发现的解决方案:在您闪亮的应用程序代码的开头:

library(magritter)

df_id_read_sheet <- read_sheet("put your sheet id here")
responses <- df_id_read_sheet
responses %<>% 
  as.data.frame()