列是字符而不是因子有什么充分的理由吗?
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
语言环境 -- 美国英语)并且不同语言环境的整理(排序)顺序可能不同 - - 不同地区的默认级别可能不同。
这似乎是一个愚蠢的问题,但在使用 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
语言环境 -- 美国英语)并且不同语言环境的整理(排序)顺序可能不同 - - 不同地区的默认级别可能不同。