首页 > 解决方案 > r 使用 With 时数据表给出不同的结果

问题描述

我想知道当直接指向列或通过字符指向列时数据表给出不同结果是否有逻辑原因。

例如

library(data.table)

iris_dt <- data.table(iris)

iris_dt[, NROW(unique(Species))]

# 3

col <- 'Species'

iris_dt[, NROW(unique(col)), with = FALSE]

# Prints the Sepal Length, which does not make sense to me

代码的第二部分发生了什么?

标签: rdata.table

解决方案


在代码的第二部分中,您选择了 data.table 的第一列。

# Equivalent too
iris_dt[, 1, with = FALSE]
# Because
NROW('Species') == 1 # TRUE

# Also 
unique('Species') == 'Species' # TRUE

'Species'只是一个长度为 1 的(字符)向量并NROW()返回它的长度。

我认为您正在寻找的是:

iris_dt[, uniqueN(get(col))] # 3

推荐阅读