【发布时间】:2021-03-30 01:40:38
【问题描述】:
我花了 45 分钟让一个非常简单的 if() 在循环中工作,但我想了解它为什么会失败。
这是一个简单的 R Magrittr 管道链,大括号 if() 条件{}
这是简化的代表(可重现的示例)
library(tidyverse) # load tidyverse library
a <- tibble(a1 = 1:6, a2 = 6:1, a3 = rep(c('a', 'b'),3), a4 = as_factor(5:10))
# function to check the data type of a column
# Fails
check1 <- function(.df, .colm)
{
.df %>%
{ if(. %>% pull(var = {{.colm}}) %>% is.character()) 1 else 2} # pull .colm from .df and check if is char
}
# Works
check2 <- function(.df, .colm)
{
.df %>%
{if(pull(., var = {{.colm}}) %>% is.character()) 1 else 2} # pull .colm from .df and check if is char
}
check1(a, a1) # Fails
#> Error in if (. %>% pull(var = {: argument is not interpretable as logical
check2(a, a1) # Works
#> [1] 2
由reprex package (v0.3.0) 于 2021-03-30 创建
如果有更简单的方法来检查数据框中列的class(),请告诉我,该方法可以概括为从用户输入中获取列名到函数
【问题讨论】:
标签: r if-statement tidyverse magrittr