dplyr:if_else贪婪

时间:2017-02-05 14:39:34

标签: r dplyr

我正在尝试mutate使用if_else对另一个变量的值有条件地使用新变量,但if_else坚持计算所有值,然后有条件地替换其中的值最终的矢量。

如果无法为其他情况计算导致某些情况的最终值的函数,则此行为会出现问题:

df_foo = data_frame(
  rate = sample(c(0, 0.1), size = 100, replace = TRUE),
  pmt = 1000,
  nper = 10
)

df_foo %>% 
  mutate(
    if_else(
      rate > 0,
      optiRum::PV(rate = rate, pmt = -pmt, nper = nper),
      0
    )
  )

当条件为TRUE时,有没有办法只计算TRUE值?

1 个答案:

答案 0 :(得分:0)

这不是if_else特有的问题,基本版本ifelse的行为相同。在ifelse的帮助文件中,我们可以阅读:

  

如果yesno太短,则会回收其元素。 yes将是。{   评估当且仅当test的任何元素是真的,并且类似地   no

在许多情况下ifelse使用不合适,并且其中一个条件中出现错误警告的情况是一个。

做你想做的事情(没有dplyr)的解决方案是:

df_foo$x <- 0
df_foo$x[df_foo$rate > 0] <- with(df_foo[df_foo$rate > 0, ], optiRum::PV(rate, nper, -pmt))