R中意外的套用功能行为

地理理论

我发现了一个令人惊讶的行为apply,我想知道是否有人可以解释。让我们看一个简单的矩阵:

> (m = matrix(1:8,ncol=4))
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8

我们可以这样垂直翻转它:

> apply(m, MARGIN=2, rev)
     [,1] [,2] [,3] [,4]
[1,]    2    4    6    8
[2,]    1    3    5    7

这将rev()向量反转函数迭代地应用于每列。但是,当我们尝试逐行应用rev时,会得到:

> apply(m, MARGIN=1, rev)
     [,1] [,2]
[1,]    7    8
[2,]    5    6
[3,]    3    4
[4,]    1    2

..逆时针旋转90度!Apply使用会产生相同的结果,FUN=function(v) {v[length(v):1]}因此绝对不是rev​​的错。

有什么解释吗?

托尼托诺夫

该文件指出

如果每次对FUN的调用返回一个长度为n的向量,则如果n> 1,则apply返回一个尺寸为c(n,dim(X)[MARGIN])的数组。

从这个角度来看,这种行为绝不是错误,而是它的工作方式。

有人可能想知道为什么将其选择为默认设置,而不是保留原始矩阵的结构。考虑以下示例:

> apply(m, 1, quantile)
     [,1] [,2]
0%    1.0  2.0
25%   2.5  3.5
50%   4.0  5.0
75%   5.5  6.5
100%  7.0  8.0

> apply(m, 2, quantile)
     [,1] [,2] [,3] [,4]
0%   1.00 3.00 5.00 7.00
25%  1.25 3.25 5.25 7.25
50%  1.50 3.50 5.50 7.50
75%  1.75 3.75 5.75 7.75
100% 2.00 4.00 6.00 8.00

> all(rownames(apply(m, 2, quantile)) == rownames(apply(m, 1, quantile)))
[1] TRUE

一致吗?确实,我们为什么还要期待其他呢?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套套用功能

来自分类Dev

在%>%内使用套用功能

来自分类Dev

奇怪的窗口功能行为

来自分类Dev

Android拆分功能行为

来自分类Dev

带有匿名功能的功能行为

来自分类Dev

熊猫套用功能-行过滤的语法

来自分类Dev

熊猫套用功能,收到KeyError'列名'

来自分类Dev

“ foreach”导致我的功能行为异常

来自分类Dev

前向脱位改变功能行为?

来自分类Dev

ZSH功能行为?(运行C ++)

来自分类Dev

Delphi XE中意外的RegEx行为

来自分类Dev

作业中意外的后增量行为

来自分类Dev

KeystoneJS中意外的字段访问控制行为

来自分类Dev

SQLITE中意外的LEFT OUTER JOIN行为

来自分类Dev

熊猫索引错误运行套用功能

来自分类Dev

熊猫套用功能无效,没有任何错误

来自分类Dev

滚动套用功能必须是实数,而不是无类型

来自分类Dev

错误:套用功能时x栏不明

来自分类Dev

C ++未执行的代码更改功能行为?

来自分类Dev

如何专门化(重载)单个类型的功能行为?

来自分类Dev

C ++未执行的代码更改功能行为?

来自分类Dev

更新到Swift 3后奇怪的转义功能行为

来自分类Dev

恢复bash中意外删除的功能

来自分类Dev

Clojure中意外的记忆功能慢

来自分类Dev

为什么未调用功能意外?

来自分类Dev

具有功能参数的意外R行为

来自分类Dev

Python 3中意外的导入行为

来自分类Dev

Perl中意外的模运算符行为

来自分类Dev

SHA哈希在Java中意外行为-提供的代码