在矩阵上调用apply()会迭代元素而不是行吗?

时间:2018-02-04 23:35:47

标签: r apply

考虑一个2列矩阵enum

Browse[2]> class(enum)
[1] "matrix"

以下是enum

的内容
Browse[2]> enum
                  x
pregnant  1   6.000
glucose   2 148.000
diastolic 3  72.000
skin      4  35.000
insulin   5   0.000
bmi       6  33.600
pedigree  7   0.627
age       8  50.000

目的是迭代行:尝试这样做是:

apply(enum, function(y) {

其中y一次代表一行。

但是y正在成为单个元素而不是整行:

Browse[2]> y
[1] 1

为什么apply的迭代被分解为单个列表而不是列表列表?

1 个答案:

答案 0 :(得分:1)

你没有在函数声明之前指定应用的MARGIN参数。

示例:

set.seed(5)
enum <- matrix(data=c(1:5, runif(5)*100), ncol=2)
apply(enum, 1, function(y) { print(y) })

输出:

> apply(enum, 1, function(y) { print(y) })
[1]  1.00000 20.02145
[1]  2.00000 68.52186
[1]  3.00000 91.68758
[1]  4.00000 28.43995
[1]  5.00000 10.46501
         [,1]     [,2]     [,3]     [,4]     [,5]
[1,]  1.00000  2.00000  3.00000  4.00000  5.00000
[2,] 20.02145 68.52186 91.68758 28.43995 10.46501