gpt4 book ai didi

r - 带有 mutate 的自定义函数不起作用

转载 作者:行者123 更新时间:2023-12-02 07:21:58 24 4
gpt4 key购买 nike

某些自定义函数在 mutate 中不起作用。你能解释一下吗
为什么 calc2 和 calc3 不起作用,以及如何修复它们才能正常工作?

    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

最佳答案

这与 dplyr/mutate 无关.你只是没有正确矢量化。让我们检查一下 calc2calc3作为输入,我们可以吗?

calc2 , x = c(1L, 4L, 7L, 2L, 5L, 8L, 3L, 6L, 9L) .也就是说,所有元素都连接成一个向量。然后将前三个相加:1 + 4 + 7 = 12。

calc3 , x更有意义,除了你然后 unlist它;之后,x和上面一样,然后你sum它的所有元素:sum(x) = 45。
calc2本质上是不可挽救的,但您可以修复 calc3通过矢量化:

calc3 = function (x) {
Reduce(`+`, x)
}

最后,您可以充分利用 calccalc3通过使用 ...论据:
calc = function (...) {
Reduce(`+`, list(...))
}

用法:
as.data.frame(m) %>% mutate(v = calc(V1, V2, V3))

关于r - 带有 mutate 的自定义函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com