R中data.table的colnames()返回的列名顺序是否始终固定?
关于R data.table列名顺序稳定性的解答
- 只要你没有主动调整过数据集的列顺序,
colnames(dt)返回的列名顺序始终和创建时的顺序一致,你给出的示例中会固定按照a、b、c的顺序返回列名,不存在匹配错位的风险。
R中data.frame、data.table的底层都是按顺序存储的列向量集合,
colnames()返回的列名向量和列的物理存储顺序是一一绑定的,和SQL中部分数据库不保证表列顺序的逻辑完全不同,你不需要担心默认顺序变动的问题。
- 你当前写的示例代码是完全可靠的:
sapply遍历colnames(dt)的顺序和你赋值给cname字段的colnames(dt)顺序完全一致,列名和对应计算出的最小值可以保证正确匹配。
如果你想使用更符合data.table原生语法的写法,避免get()调用,可以参考下面的实现,性能和可读性都更优:
# 写法1:利用data.table的分组逻辑实现 vals <- dt[, .(val = min(.SD)), by = .(cname = names(dt))] # 写法2:和你原有逻辑完全对齐的精简写法 vals <- data.table(cname = names(dt), val = dt[, sapply(.SD, min)])
内容的提问来源于stack exchange,提问作者charliealpha
相关产品推荐
相关产品推荐

