首页 > 解决方案 > 编写复杂的函数

问题描述

我是在 R 中创建函数的新手......我有一个公式,我试图用它来计算我的数据框中的一个新变量。我曾尝试编写一个函数以应用于 mutate() 但没有成功。公式如下所示:

x = 35(col2 - col1) + 35(col4 - col3)

我试着写

val <- function(x) (35(y - x) + 35(v - w))

并在 mutate() 中输入列名...

df <- df %>% mutate(newcol= val(y=col2, x = col1, v = col4, w = col3)). 

我也尝试直接将公式放入 mutate()

df <- df %>% mutate(newcol= 35(col2 - col1) + 35(col4 - col3)). 

我总是收到这个错误:

Error in df(df) : attempt to apply non-function

任何人都可以提供指导吗?

标签: rfunction

解决方案


好吧,在 R(35(y - x) + 35(v - w))中不是有效的语法。您需要明确指定乘法运算符。

您可以直接在以下位置执行此操作mutate

library(dplyr)
df %>% mutate(x = 35 * (col2 - col1) + 35 * (col4 - col3))

或者,如果您想创建一个函数,请将所有参数作为函数的参数传递。

val <- function(x, y, v, w) 35 * (y - x) + 35 * (w - v)

并调用它mutate

df %>% mutate(x = val(col1, col2, col3, col4))

推荐阅读