列是字符而不是因子有什么充分的理由吗?

Is there any good reason for columns to be characters instead of factors?

这似乎是一个愚蠢的问题,但在使用 R 几个月后,我意识到我经常发现自己将字符串转换为因子,例如,tabulate 函数不适用于字符串。

在这一点上,我正在考虑简单地将任何字符串转换为一个因子。但这引出了一个问题,有什么理由不这样做(除了对字符串本身进行操作之外)?

因素有双重表示——'label';和关卡的底层编码。 R 使用了这些表示中的哪一个可能很微妙且令人困惑。

这可能会造成混淆的一个例子是子集化。这是一个命名向量、一个字符向量和一个具有默认(按字母顺序排列)级别的因子

x = c(foo = 1, bar = 2)
y = c("bar", "foo")
z = factor(y)        # default levels are "bar", "foo", i.e., alphabetical

子集 x y 将字符值匹配到名称,但 x 子集 z 使用底层编码。

> x[y]
bar foo 
  2   1 
> x[z]
foo bar 
  1   2 

这可能会变得更加混乱,因为 R 可以在不同的语言环境中工作(例如,我正在使用 en_US 语言环境 -- 美国英语)并且不同语言环境的整理(排序)顺序可能不同 - - 不同地区的默认级别可能不同。