首页 > 解决方案 > 数据框计算列未正确计算

问题描述

deltas = 10^c(-1:-12)
df = data.frame(deltas)
df <- mutate(df, Num_H11 = -(
  Gamma_log_like(optout_gamma$par - c(df$deltas, 0), X)
  - 2 * Gamma_log_like(optout_gamma$par, X)
  + Gamma_log_like(optout_gamma$par + c(df$deltas, 0), X)) / (df$deltas^2)
  )

在上面的代码中,如果我df$deltas用单个 delta 值替换它所有计算正确,但是当我使用对数据框列的引用时,结果不正确,我收到以下警告:

longer object length is not a multiple of shorter object lengthlonger object length is not a multiple of shorter object length

我认为这里的问题是 df$deltas 在此代码中被视为向量,而不是使用和评估的每一行中的单个值,但我不知道如何解决这个问题。

标签: rdataframe

解决方案


Gamma_log_like从问题的描述来看,函数似乎没有向量化。我们可以使用map_dbl一次将输入传递给Gamma_log_like函数。

library(dplyr)

df %>%
  mutate(Num_H11 = purrr::map_dbl(deltas, ~
              -(Gamma_log_like(optout_gamma$par - c(.x, 0), X)
              - 2 * Gamma_log_like(optout_gamma$par, X)
              + Gamma_log_like(optout_gamma$par + c(.x, 0), X)) / (.x^2)
))

推荐阅读