R:在tidyverse中创建函数

R:在tidyverse中创建函数,r,function,tidyverse,R,Function,Tidyverse,我有一些假数据: 库(tidyverse) df% ###不同的检查 #var5中不应缺少任何值 df%>%过滤器(is.na(var5))%>%添加错误(“var5中有NAs”) #var3应大于var4 df%%>%过滤器(var3%添加错误(“var3小于var4”) # ... 等 然后我必须定义函数add\u errors(): 定义函数 错误我们可以在控制台上打印错误消息 add_errors <- function(dat, error) { glue::glue(

我有一些假数据:

库(tidyverse)
df%

###不同的检查
#var5中不应缺少任何值
df%>%过滤器(is.na(var5))%>%添加错误(“var5中有NAs”)
#var3应大于var4
df%%>%过滤器(var3%添加错误(“var3小于var4”)
# ... 等
然后我必须定义函数
add\u errors()

定义函数
错误我们可以在控制台上打印错误消息

add_errors <- function(dat, error) {
    glue::glue("{error} at id: {toString(dat[['id']])}")
   }

t
是一个临时文件,也可以将其写入自定义目标文件夹

我们可以在控制台上打印错误消息

add_errors <- function(dat, error) {
    glue::glue("{error} at id: {toString(dat[['id']])}")
   }

t
是一个临时文件,也可以将其写入自定义目标文件夹中

以下代码的作用与您的要求类似。我尝试在不将errors数据帧作为参数传递的情况下执行此操作,但最终不会在函数外部更改errors变量

errors=data.frame(id=numeric(), errormessage=character())
add_errors=function(df, errormessage) {
    return(bind_rows(errors, data.frame(id=df$id, errormessage=errormessage)))
}
errors=df %>% filter(is.na(var5)) %>% add_errors("There are NAs in var5") 
errors=df %>% filter(var3 > var4) %>% add_errors("var3 is smaller than var4")
输出:

> print(errors)
  id              errormessage
1  3     There are NAs in var5
2  2 var3 is smaller than var4
3  3 var3 is smaller than var4
4  7 var3 is smaller than var4
5  8 var3 is smaller than var4
6  9 var3 is smaller than var4
7 12 var3 is smaller than var4
8 16 var3 is smaller than var4
9 18 var3 is smaller than var4

下面的代码执行与您要求的类似的操作。我尝试在不将errors数据帧作为参数传递的情况下执行此操作,但最终不会在函数外部更改errors变量

errors=data.frame(id=numeric(), errormessage=character())
add_errors=function(df, errormessage) {
    return(bind_rows(errors, data.frame(id=df$id, errormessage=errormessage)))
}
errors=df %>% filter(is.na(var5)) %>% add_errors("There are NAs in var5") 
errors=df %>% filter(var3 > var4) %>% add_errors("var3 is smaller than var4")
输出:

> print(errors)
  id              errormessage
1  3     There are NAs in var5
2  2 var3 is smaller than var4
3  3 var3 is smaller than var4
4  7 var3 is smaller than var4
5  8 var3 is smaller than var4
6  9 var3 is smaller than var4
7 12 var3 is smaller than var4
8 16 var3 is smaller than var4
9 18 var3 is smaller than var4

我知道这个问题是关于创建一个自定义函数来检查错误。但是有一个很好的名为{pointblank}的包,它正是为这种任务而设计的

我们可以设置一个所谓的“代理”并“询问”它,以获得一个好的报告,而不是设置一个名为
error
data.frame
。有多个备选工作流可用于检查错误,如中所述。下面是一个可能的方法来使用该软件包解决您的问题

库(dplyr)
图书馆(空白点)
df%
列值不为空(var5)%
列值不在集合中(
vars(var3_lt_4),
前提条件=~.%>%dplyr::mutate(var3\u lt\u 4=var3>var4),
设置=假)%>%
询问
代理人

我知道这个问题是关于创建一个自定义函数来检查错误。但是有一个很好的名为{pointblank}的包,它正是为这种任务而设计的

我们可以设置一个所谓的“代理”并“询问”它,以获得一个好的报告,而不是设置一个名为
error
data.frame
。有多个备选工作流可用于检查错误,如中所述。下面是一个可能的方法来使用该软件包解决您的问题

库(dplyr)
图书馆(空白点)
df%
列值不为空(var5)%
列值不在集合中(
vars(var3_lt_4),
前提条件=~.%>%dplyr::mutate(var3\u lt\u 4=var3>var4),
设置=假)%>%
询问
代理人

最后我需要一个data.frame,它有两列:1。包含错误的案例的ID,2。错误消息itself@D.Studer请查看更新的解决方案谢谢,太好了!还有一件事:所有的错误消息都应该写在同一个data.frame中。@D.Studer我用
logger
更新了一个更通用的功能,最后我需要一个data.frame,它有两列:1。包含错误的案例的ID,2。错误消息itself@D.Studer请查看更新的解决方案谢谢,太好了!还有一件事:所有错误消息都应该写在同一个data.frame中。@D.Studer我用
logger
更新了一个更通用的功能,谢谢,太好了!不幸的是,我需要在最后一个data.frame中包含所有不同的错误消息,因此函数需要访问在函数外部定义的data.frame。谢谢,这很好!不幸的是,我需要在最后一个data.frame中包含所有不同的错误消息,因此函数需要访问在我猜的函数外部定义的data.frame。