带有mutate的自定义函数不起作用 [英] custom function with mutate do not work

查看:107
本文介绍了带有mutate的自定义函数不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

某些自定义功能无法在mutate中使用。您能解释一下
为什么calc2和calc3不能正常工作,以及如何使它们正常工作吗?

Some custom functions do not work in mutate. Would you explain why calc2 and calc3 dont work, and how to fix them to work properly?

    library(dplyr)
    m <- matrix(c(1,2,3,4,5,6,7,8,9), nrow = 3, byrow = T)        

    calc <- function(x1,x2,x3){ #scalar
      return(x1 + x2 + x3)
    }

    calc2 <- function(x){ #vector
      return(x[1] + x[2] + x[3])
    }

    calc3 <- function(x){ #list
      x <- unlist(x)
      return(sum(x))
    }

    as.data.frame(m) %>% 
      mutate(val  = calc(V1,V2,V3), #OK
             val2 = calc2(c(V1,V2,V3) ), #NG
             val3 = calc3(list(V1,V2,V3))) #NG

以下是输出:

    V1 V2 V3 val val2 val3
    1  2  3   6   12   45
    4  5  6  15   12   45
    7  8  9  24   12   45


推荐答案

我们可以做到这一点而无需更改使用 rowwise

We can do this without changing the OP's functions using rowwise

library(dplyr)
as.data.frame(m) %>%
         rowwise() %>%
         mutate(val = calc(V1, V2, V3), 
                val2 = calc2(c(V1, V2, V3)),
                val3 = calc3(list(V1, V2, V3)))
# A tibble: 3 × 6
#     V1    V2    V3   val  val2  val3
#  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1     1     2     3     6     6     6
#2     4     5     6    15    15    15
#3     7     8     9    24    24    24

这篇关于带有mutate的自定义函数不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆