如何移除所有data.frame与tbl_df对象?改写指定代码实现需求
解决方案
你可以通过修改判断逻辑,让代码同时匹配data.frame和tbl_df类型的对象,推荐使用inherits()函数来处理类继承关系(因为tibble是data.frame的子类,inherits()能更准确识别):
rm(list = ls(all = TRUE)[sapply(mget(ls(all = TRUE)), function(x) inherits(x, c("data.frame", "tbl_df")))])
补充说明
- 如果更倾向于直接检查对象的类标签,可以用
any(class(x) %in% ...)来确保匹配到任意目标类:
rm(list = ls(all = TRUE)[sapply(mget(ls(all = TRUE)), function(x) any(class(x) %in% c("data.frame", "tbl_df")))])
- 两种写法的区别:
inherits()会考虑类的继承关系(比如tibble对象会被inherits(x, "data.frame")识别),而直接检查class()则严格匹配标签。根据你的需求,两种写法都能实现目标,前者更符合R的面向对象设计逻辑。
内容的提问来源于stack exchange,提问作者Octave Wagner
相关产品推荐
相关产品推荐

