在dplyr :: mutate中应用自定义函数时出现意外值

埃美塞克斯

我的数据如下所示:

library(tidyverse)

df <- tribble(
    ~y_val, ~z_val,
    2, 4,
    5, 3, 
    8, 2, 
    1, 1, 
    9, 3)

我有自定义函数fun_b(),希望通过dplyr :: mutate调用将其应用于数据框。但是,fun_b()使用fun_a()内部有循环的函数

fun_a <- function(x, y, z, times = 1) {

    df <- data.frame()
    for (i in 1:times) {
        x <- x * 2 + i * x
        y <- y / 3 + i * y
        z <- z + 1 + z * i
    d <- data.frame(x, y, z)
    df <- rbind(df, d)
    }
    return(df)
}

fun_b <- function(x, y, z, times = 1) {
    df <- fun_a(x, y, z, times)
    x_r <- sum(df$x)
    y_r <- sum(df$y)
    z_r <- sum(df$z)
    val <- x_r / y_r * z_r
    return(val)
}

当我运行自定义函数时:

df %>% 
    mutate(test = fun_b(x = 1, y = y_val, z = z_val, times = 1))

中的每个突变值都test显示相同的值(13.95)。那没有道理!例如,小标题的第一行(y_val = 2, z_val = 4)应为10.125!

fun_b(x = 1, y = 2, z = 4, times = 1)

这里发生了什么?

利斯特尔

您可以按行分组,以便针对每行分别对函数进行求值:

df %>% 
    rowwise() %>%
    mutate(test = fun_b(x = 1, y = y_val, z = z_val, times = 1))

## Source: local data frame [5 x 3]
## Groups: <by row>
## 
## # A tibble: 5 × 3
##   y_val z_val     test
##   <dbl> <dbl>    <dbl>
## 1     2     4 10.12500
## 2     5     3  3.15000
## 3     8     2  1.40625
## 4     1     1  6.75000
## 5     9     3  1.75000

或进行编辑fun_b以使其向量化,或者只是让R:

df %>% mutate(test = Vectorize(fun_b)(x = 1, y = y_val, z = z_val, times = 1))

## # A tibble: 5 × 3
##   y_val z_val     test
##   <dbl> <dbl>    <dbl>
## 1     2     4 10.12500
## 2     5     3  3.15000
## 3     8     2  1.40625
## 4     1     1  6.75000
## 5     9     3  1.75000

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dplyr mutate - 如何使用 mutate 正确应用自定义函数?

来自分类Dev

dplyr mutate rowSums计算或自定义函数

来自分类Dev

在dplyr mutate中使用自定义函数?

来自分类Dev

在dplyr mutate中使用自定义函数?

来自分类Dev

在 dplyr 中使用自定义 mutate 函数

来自分类Dev

使用dplyr :: mutate(across())将多列应用于自定义函数

来自分类Dev

在R中的自定义函数中以数据框和列为参数对dplyr中的分组数据使用mutate

来自分类Dev

将dplyr quosure自定义函数与mutate_at结合使用

来自分类Dev

dplyr 0.8.0 mutate_at:使用自定义函数而不覆盖原始列

来自分类Dev

R中的自定义查找功能在R中的dplyr :: mutate中不起作用

来自分类Dev

mutate()中的Dplyr管道(%>%)?

来自分类Dev

使用dplyr mutate查找值在组中的首次出现

来自分类Dev

从dplyr :: mutate调用用户定义的函数

来自分类Dev

使用 dplyr 应用自定义函数进行许多独特的测量

来自分类Dev

在dplyr中使用{{}}调用自定义函数

来自分类Dev

添加自定义函数以在dplyr中进行汇总

来自分类Dev

使用 dplyr 计算自定义函数第 n 行

来自分类Dev

R dplyr:使用自定义函数的行明智操作

来自分类Dev

编写自定义函数时,将列名传递给dplyr :: coalesce()

来自分类Dev

dplyr mutate中的exp函数返回1

来自分类Dev

dplyr :: mutate_at遍历函数中的列

来自分类Dev

dplyr:在mutate_at函数中访问列名

来自分类Dev

dplyr中的自定义求和函数返回不一致的结果

来自分类Dev

如何将dplyr中的动态列名传递给自定义函数?

来自分类Dev

尝试在自定义函数中重用dplyr代码块;我想念什么?

来自分类Dev

将Dplyr联接和设置操作合并到自定义函数中

来自分类Dev

dplyr :: mutate()的向量化函数

来自分类Dev

dplyr在mutate中每组广播单个值

来自分类Dev

dplyr中的rowMeans函数

Related 相关文章

  1. 1

    dplyr mutate - 如何使用 mutate 正确应用自定义函数?

  2. 2

    dplyr mutate rowSums计算或自定义函数

  3. 3

    在dplyr mutate中使用自定义函数?

  4. 4

    在dplyr mutate中使用自定义函数?

  5. 5

    在 dplyr 中使用自定义 mutate 函数

  6. 6

    使用dplyr :: mutate(across())将多列应用于自定义函数

  7. 7

    在R中的自定义函数中以数据框和列为参数对dplyr中的分组数据使用mutate

  8. 8

    将dplyr quosure自定义函数与mutate_at结合使用

  9. 9

    dplyr 0.8.0 mutate_at:使用自定义函数而不覆盖原始列

  10. 10

    R中的自定义查找功能在R中的dplyr :: mutate中不起作用

  11. 11

    mutate()中的Dplyr管道(%>%)?

  12. 12

    使用dplyr mutate查找值在组中的首次出现

  13. 13

    从dplyr :: mutate调用用户定义的函数

  14. 14

    使用 dplyr 应用自定义函数进行许多独特的测量

  15. 15

    在dplyr中使用{{}}调用自定义函数

  16. 16

    添加自定义函数以在dplyr中进行汇总

  17. 17

    使用 dplyr 计算自定义函数第 n 行

  18. 18

    R dplyr:使用自定义函数的行明智操作

  19. 19

    编写自定义函数时,将列名传递给dplyr :: coalesce()

  20. 20

    dplyr mutate中的exp函数返回1

  21. 21

    dplyr :: mutate_at遍历函数中的列

  22. 22

    dplyr:在mutate_at函数中访问列名

  23. 23

    dplyr中的自定义求和函数返回不一致的结果

  24. 24

    如何将dplyr中的动态列名传递给自定义函数?

  25. 25

    尝试在自定义函数中重用dplyr代码块;我想念什么?

  26. 26

    将Dplyr联接和设置操作合并到自定义函数中

  27. 27

    dplyr :: mutate()的向量化函数

  28. 28

    dplyr在mutate中每组广播单个值

  29. 29

    dplyr中的rowMeans函数

热门标签

归档