如何在函数调用中检查column是否为.numeric()?

blpfk2vs  于 2023-04-27  发布在  其他
关注(0)|答案(3)|浏览(95)

我正在尝试编写一个小测试,它将检查提供的列是否为数字

fun_df <- function(data,x){
   
  if(is.numeric(data$x){
    stop("done!")
  }
  print("did not pass")
}

fun_df(mtcars, dist)

什么是指定is.numeric(data$x)的最佳方法?我尝试了{{x}}!!x。但我无法获得测试通过。我特别想指定fun_df(cars, dist)而不是fun_df(cars, "dist")

kuuvgm7e

kuuvgm7e1#

使用deparse(substitute())

fun_df <- function(data,x) {
  xx <- deparse(substitute(x))
  if(is.numeric(data[[xx]])){
    stop("done!")
  }
  print("did not pass")
}
fun_df(iris, Sepal.Width)

Error in fun_df(iris, Sepal.Width) : done!
tv6aics1

tv6aics12#

**更新:**见注解:

我们不需要替代品:我们只能使用列名:

fun_df <- function(data,x) {
  
  if(is.numeric(data[,x])){
    stop("done!")
  }
  print("did not pass")
}

fun_df(mtcars, "mpg")
Error in fun_df(mtcars, "mpg") : done!

**第一个答案:**另外,我们可以使用{{}}:(感谢Deschen解决了括号问题(+1):

fun_df <- function(data, x) {

 i1 <- data %>%
         pull({{x}}) %>%
     is.numeric
 if(i1)  {
   print("done!") 
 } else
   print("did not pass")    
     
     
  
}

fun_df(cars, dist)
[1] "done!"
q3aa0525

q3aa05253#

1.函数中缺少一个封闭括号。
1.你可能想做一个if else组合。
1.如果您打开了变量名作为字符向量传递,则以下操作有效:

fun_df <- function(data, x)
{
  if(is.numeric(data[, x]))
  {
    print("done!")
  } else
  print("did not pass")
}

fun_df(mtcars, "mpg")

[1] "done!"

相关问题