如何解决编写复杂的功能
我是刚开始在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
任何人都可以提供指导吗?
解决方法
那么,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))
,
为了保持简单,我只会坚持使用tidyverse
。
首先,创建您的对象:
library(tidyverse)
df <- tibble(
v = c(2,4,6),w = 0:2,x = 8:6,y = 9:7
)
...生成:
# A tibble: 3 x 4
v w x y
<dbl> <int> <int> <int>
1 2 0 8 9
2 4 1 7 8
3 6 2 6 7
然后打电话给...
df %>% mutate(newcol= 35*(y-x) + 35*(v-w))
...产生...
# A tibble: 3 x 5
v w x y newcol
<dbl> <int> <int> <int> <dbl>
1 2 0 8 9 105
2 4 1 7 8 140
3 6 2 6 7 175
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。