r - 使自定义函数可通过管道传输

标签 r

我正在尝试编写一些混合管道运算符和函数的代码。

以下代码行应计算之前按名称分组的一些股票的每日返回。

mod_stock_data$daily_return = mod_stock_data %>% group_by(gvkey, iid)  %>% dailyReturn(prccd)

mod_stock_data 是一个数据帧,包含 gvkey(股票的 key 名称)、iid(标识符)和 prccd(收盘价)。

我使用管道运算符来执行按股票名称对数据框进行分组的第一步。执行此操作后,分组依据的结果将通过管道传输到 dailyReturn() 函数。

但是我没有添加包含每日 yield 的新列,而是收到以下错误:

Error in dailyReturn(., prccd) : unused argument (prccd)

有人可以帮忙吗?

dailyReturn 函数:

dailyReturn <- function(tx) {
  returns  = tx / lag(tx, 1) - 1
  return(returns)
}

最佳答案

如果我们修改函数,它可以在mutate中使用

dailyReturn <- function(tx) {
   tx / lag(tx, 1) - 1
  
 }

-测试

mtcars %>%
   group_by(cyl) %>% 
   mutate(out = dailyReturn(mpg))

-输出

# A tibble: 32 × 12
# Groups:   cyl [3]
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb     out
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4 NA     
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4  0     
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1 NA     
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1  0.0190
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2 NA     
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1 -0.154 
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4 -0.235 
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2  0.0702
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2 -0.0656
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4  0.0608
# … with 22 more rows

关于r - 使自定义函数可通过管道传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70127790/

相关文章:

r - 绘制线条而不是点 R

r - 等效于R中字符串的总和

r - (速度挑战)根据通用汉明距离计算距离矩阵的任何更快的方法?

R Shiny 在不同进程中运行任务/脚本

r - 双 for 循环的高效向量化

r - 使用 RSelenium 跨 Windows 和 Mac 进行网页抓取

r - 如何从R社区的角度打造最好的交互式R语言在线学习平台?

r - 从矩阵列表中获取选定的矩阵列

r - 在 R 中使用行名和列名获取值?

r - 最大样本