我有一个脚本返回一个data.table将包含一组列的脚本。我想重命名其中的一些列,但是setnames如果没有全部出现,则会中断。有什么方法可以重命名而不会引起循环+错误捕获或与现有名称相交?
iris.dt <- data.table(iris)
# First time works fine
setnames(iris.dt, c("Sepal.Length", "Sepal.Width"), c("length", "width"))
# Second time fails because columns no longer exist
setnames(iris.dt, c("Sepal.Length", "Sepal.Width"), c("length", "width"))
# Error in setnames(iris.dt, c("Sepal.Length", "Sepal.Width"), c("length",
# :Items of 'old' not found in column names: Sepal.Length,Sepal.Width
Run Code Online (Sandbox Code Playgroud)
这样的东西setnames(..., allow=T)将是理想的。
从data.tablev1.12.0(2019 年 1 月 13 日)开始,这是一个参数setnames:
setnames(..., skip_absent=TRUE) # FALSE by default.
Run Code Online (Sandbox Code Playgroud)
这个修改后的setnames函数成功了:
Setnames <- function(x, old, new, allow.absent.cols=F) {
if (!allow.absent.cols) {
setnames(x, old, new)
} else {
old.intersect <- intersect(old, names(x))
common.indices <- old %in% old.intersect
new.intersect <- new[common.indices]
setnames(x, old.intersect, new.intersect)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13802 次 |
| 最近记录: |