You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tidyverse的select_if中搭配is.numeric使用NOT逻辑筛选非数值变量

报错原因

你原来的写法报错的核心原因是!is.numeric是直接对is.numeric这个函数本身取逻辑非,R会默认将函数对象转为逻辑值TRUE,因此!is.numeric实际得到的是固定逻辑值FALSE,不符合select_if要求传入「对每列进行判断返回逻辑值的函数」的参数规则。

正确实现方式

1. 基于select_if的兼容写法

两种写法都可以正常运行:

  • 使用公式匿名函数封装判断逻辑:
mydata.dataframe %>%
  select_if(~!is.numeric(.))
  • 使用Negate()直接生成取反的判断函数:
mydata.dataframe %>%
  select_if(Negate(is.numeric))

2. dplyr 1.0.0+ 推荐写法

目前新版dplyr已经更推荐用select()搭配where()语法实现列筛选,逻辑更清晰统一:

mydata.dataframe %>%
  select(where(~!is.numeric(.)))

同样也可以搭配Negate()使用:

mydata.dataframe %>%
  select(where(Negate(is.numeric)))

内容的提问来源于stack exchange,提问作者Seydou GORO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:06:06