r - 如何在 R 中创建一个数据框,当其他列之一发生更改时自动更新列?

标签 r tibble

这是我的输入

    > a<-data.frame(p=c(1:3),q=c(3:5))
    > a
      p q
    1 1 3
    2 2 4
    3 3 5
    > a<-a%>%mutate(r=p*q)
    > a
      p q  r
    1 1 3  3
    2 2 4  8
    3 3 5 15

修改一个单元格

   > a$p[1]<-2
   > a
     p q  r
   1 2 3  3
   2 2 4  8
   3 3 5 15     

a$r[1] 尚未更新为 2*3=6

我希望输出是:

    > a
      p q  r
    1 1 3  6
    2 2 4  8
    3 3 5 15

也就是说,我希望每当 p 或 q 之一发生变化时,r 的值就会自动更新。

最佳答案

您正在尝试复制 Excel 用户体验,对吗?编辑一个单元格应更新所有相关单元格。

Excel 的底层——以及 R 中最终的解决方案——是对所有可能的逻辑下游值的重新计算。必须有什么东西来触发它。在 Excel 中,触发器是更改单元格或执行重新计算命令。在 R 扩展中Shiny各种鼠标移动和点击都可以做到这一点。

是的,您可以编写一个方法来查看 a$p 中是否有任何成员或a$q已经改变了,但也必须有一些东西触发该脚本。 R 不提供始终运行的功能,例如 PC 中等待键盘输入或鼠标移动的部分。对于大多数目的,R 并不需要花费比仅仅计算 a[1,3] 更长的时间来进行所有可能的计算。基于新值 a[a,1] .

您可以创建一个函数来执行所有常规计算。您可以通过输入 recalc() 来启动它在控制台中。不需要参数。为其分配键盘快捷键并在对数据对象进行任何更改后运行它。

    recalc <- function() {
      a$r <<- a$p * a$q
      ...
      ...
      TRUE
      }

超赋值运算符<<-允许您操纵全局环境中的对象,就像在控制台中键入命令一样。这不是通常构建函数的方式。

关于r - 如何在 R 中创建一个数据框,当其他列之一发生更改时自动更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51127603/

相关文章:

r - 将 {.tabset} 与 bookdown::bs4_book() 一起使用

r - 如何加入相似字符的数据集?

r - 在书本结尾处创建定义/定理的索引

r - R 中具有非线性外生变量的 ARIMA 模型

r - 扩展 tibble : getting the new S3 class to stick

r - 检查连续日期内的两个值是否相同

r - 将列表列表转换为 data.frame 或 tibble (R) 的单个嵌套行

xml - R语言XML解析

r - 如何将列表元素提取到 r 中的多个 tibble 列中?

r - do add_row 和 group_by 的问题。在 add_row 中需要 group_by 变量名