在R中排序时出现奇怪的行为

4

我对以下代码有些迷惑:

simula <- data.frame(
  a=sample(c("b", "a"), 10, replace=TRUE), 
  b=sample(c("bb", "aa"), 10, replace=TRUE), 
  c=rnorm(10), 
  d=rnorm(10))

order(simula$a, simula$d, decreasing=c(T,F))

在order语句中出现错误,提示:

参数长度不同

这对我来说不太有意义。

有人能解释一下为什么会出现这个错误吗?

1个回答

0

stringsAsFactors = F应该可以解决这个问题:

simula <- data.frame(
  a=sample(c("b", "a"), 10, replace=TRUE), 
  b=sample(c("bb", "aa"), 10, replace=TRUE), 
  c=rnorm(10), d=rnorm(10), stringsAsFactors = FALSE)
order(simula$a, simula$d, decreasing=c(TRUE, FALSE))

否则变量将被存储为因子,样本 a / b 只有 2 个级别,而与之相比,列 c / d 具有 10 个元素。

1
推荐使用FALSETRUE,而不是FT。请注意,F <- TRUE是完全合法的。 - lmo
3
你的解决方案有效,但是请注意,如果a和b是因子,order(simula$a, simula$d, decreasing=TRUE)将起作用。因此,很可能问题出在基数排序上,它是唯一接受多个参数进行降序排列的方法。 - lmo
1
非常感谢。然而,使用 stringsAsFactors = F 在排序时有点相当于使用 as.character。我知道如何修复错误,但我真正不理解的是它的原因是什么。 - rhg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接