【发布时间】:2018-01-17 10:36:59
【问题描述】:
我正在编写一个非常基本的函数,它检测具有特定名称的列,然后返回不包括这些列的表。我不知道什么是使这个函数类型稳定的最简洁的方法,其中它接受 data.frames 或 data.tables 并在它进入的同一个类中吐出结果表。
例如,我通常的工作流程是使用 data.table。
library(data.table)
dt <- data.table(names = sample(c("Ruby","Fire","Azure","Green"), 10, replace = T), age = 10:19, phone = 123456:123465)
df <- data.frame(names = sample(c("Ruby","Fire","Azure","Green"), 10, replace = T), age = 10:19, phone = 123456:123465)
detach("package:data.table")
removeAge <- function(db){
ageCols <- grepl("age",names(db))
db <- db[, !ageCols]
return(db)
}
removeAge(df) # returns data.frame with age column removed
removeAge(dt) # returns vector of logical T,F,T
如何使我的示例中的removeAge 函数不知道输入表是data.frame 还是data.table?这个例子也将帮助我学习更复杂的功能。我假设一种方法是检查输入表类是否转换为 data.frame,但对于大型表,我猜这在计算上会很昂贵。
很想知道在这种情况下有什么好的做法。
谢谢!
【问题讨论】:
-
如果传入函数的表不是 data.table 并且 R 会话没有加载 data.table 包,那么我的函数将无法工作。是否可以编写一行/两行代码来对 data.frame 或 data.table 输入的列进行子集
-
编辑:实际上,只需替换该行,我就得到了两者的逻辑向量。
-
没错,这是我的第一个想法。请参阅我的答案以获取解决方案;-)
标签: r data.table