【问题标题】:Automatic recomputation and syncing of calculated columns in dataframe数据框中计算列的自动重新计算和同步
【发布时间】:2021-05-26 08:41:03
【问题描述】:

有 3 个对象,v1、df1 和 df2,如下所示:

v1  <- seq(1,5,by=1)
df1 <- tibble(a = v1, b = a * 10)
df2 <- tibble(x = df1$b*10)

df1 使用 v1 的值,df2 使用 df1 的列值。

现在假设 v1 的值发生了变化:

v1 <- seq(10,50,by=10)

每当 v1 改变它的值时,如何自动重新计算 df1 和 df2 的值并使其与 v1 保持同步?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是不可能的。您将不得不编写自己的函数或使用一些外部库,在 R 对象中是一个副本,这意味着 df2 不知道 v1 包含什么或 v1 在创建 df2 后如何更改.另见this similar question

    【讨论】:

      【解决方案2】:

      闭包与我认为您所做的非常相似:

      create_x <- function(x) {
        x_saved <- x
      
        get_df1 <- function() {
          tibble(a = x_saved, b = a * 10)
        }
        get_df2 <- function() {
          tibble(x = get_df1()$b * 10)
        }
        list(df1 = get_df1(), df2 = get_df2())
      }
      
      v1 <- create_x(seq(5))
      v1$df1
      v1$df2
      
      v1 <- create_x(seq(5) * 10)
      v1$df1 # access df1 and df2 without manual update
      v1$df2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2019-10-12
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多