我正在尝试编写一个函数,将某些参数的默认值设置为NULL。然而,当我想在调用函数时指定这些参数不为NULL时,我收到了错误消息:找不到这些对象。
简单的启动器功能:
library(dplyr)
toydf <- data.frame(Name = "Fred", Age="Old", Hair="Brown")
toyA <- function(df, groupA){
data.frame(A = df%>%dplyr::select({{groupA}}))
}
toyA(toydf, Name)
toyA(toydf, Age)
我想指定一些参数以具有NULL默认值,this和this似乎建议应该工作。我试试这个:
toyB <- function(df, groupA, groupB=NULL, groupC=NULL){
if((!is.null(groupB)) & (!is.null(groupC))){
data.frame(A = df%>%dplyr::select({{groupA}}),
B = df%>%dplyr::select({{groupB}}),
C = df%>%dplyr::select({{groupC}}))
}
else{
data.frame(A = df%>%dplyr::select({{groupA}}))
}
}
但这给了我一个错误:
toyB(toydf, Name, Age, Hair)
Error in toyB(toydf, Name, Age, Hair) : object 'Age' not found
我们可以通过检查missing()
来解决它,就像其他一些问题和解决方案建议的那样。
toyC <- function(df, groupA, groupB, groupC){
if((!missing(groupB)) & (!missing(groupC))){
data.frame(A = df%>%dplyr::select({{groupA}}),
B = df%>%dplyr::select({{groupB}}),
C = df%>%dplyr::select({{groupC}}))
}
else{
data.frame(A = df%>%dplyr::select({{groupA}}))
}
}
toyC(toydf,Name)
toyC(toydf, Name, Age, Hair)
为什么NULL默认值不起作用?
1条答案
按热度按时间q3qa4bjr1#
您应该直接在
select
中使用NSE。