【发布时间】:2015-10-18 07:55:18
【问题描述】:
我正在自学 R 的基础知识,并且在尝试使用非默认可选参数进行排序时,在传递 sort 函数时遇到了使用函数 tapply 的问题.这是我面临的问题的一个例子:
给定向量
x <- c(1.1, 1.0, 2.1, NA_real_)
y <- c("a", "b", "c","d")
我发现
tapply(y, x, sort, decreasing=TRUE, na.last=TRUE)
无论我赋予 reduction 和 na.last 的逻辑分配如何,都会产生相同的输出。事实上,输出总是默认为排序默认值
decreasing = FALSE, na.last = NA
记录一下,输入上面的例子时,输出是
> tapply(y, x, sort, decreasing=TRUE, na.last=TRUE)
1 1.1 2.1
"b" "a" "c"
我还要提一下,如果我定义了备用函数
sort2 <- function(v) sort(v, decreasing=TRUE, na.last=TRUE);
并将 sort2 传递给 tapply,我仍然遇到同样的问题。
我正在使用 R 3.2.0 在 Mac OS X 10.10.4 上运行此代码。单独使用 sort 会产生所需的行为(即在不通过 tapply 的情况下自行调用 sort),因为它在更改时会正确执行递减和na.last参数。
提前感谢您的帮助。
【问题讨论】:
-
您期望什么输出?您将
y拆分为x并对每个组件进行排序,其中包含单个值。试试x <- c(1.1, 1.0, 2.1, NA_real_); y <- c("a", "a", "d","d"); tapply(x, y, sort, decreasing=TRUE, na.last=TRUE) -
@nongkrong 我所希望的是,通过传递不同的递减值,我可以在排序 1、1.1、2.1(当递减=F 时)和 2.1、1.1、1(当减少=T) 并正确调整了相应的字母分配。