在r中应用函数(带矩阵和函数)

时间:2017-09-29 08:10:45

标签: r matrix statistics

我正在尝试使用apply函数制作3行和8列矩阵以简化代码,但我有问题... 我必须像这样制作矩阵:

    [,1] [,2] [,3]

[1,]    1    1    1

[2,]    2    4    3

[3,]    3    9    6

[4,]    4   16   10

[5,]    5   25   15

[6,]    6   36   21

[7,]    7   49   28

[8,]    8   64   36
x <- matrix(1:8,8,3)
x
m <- apply(x,2,function(z) return(c(z,z^2,(z^2+z)%/%2)))
m

2 个答案:

答案 0 :(得分:0)

我们创建list个函数并使用for循环遍历列,应用相应的函数

f1 <- list(function(x) x, function(x) x^2, function(x) (x^2 + x)%/%2)
for(i in seq_len(ncol(x))) x[,i] <- f1[[i]](x[,i])
x
#      [,1] [,2] [,3]
#[1,]    1    1    1
#[2,]    2    4    3
#[3,]    3    9    6
#[4,]    4   16   10
#[5,]    5   25   15
#[6,]    6   36   21
#[7,]    7   49   28
#[8,]    8   64   36

在OP的解决方案中,apply循环遍历每一列,但每个函数都应用于所有列,并且结果是连接的。

答案 1 :(得分:0)

apply函数将函数应用于数组或矩阵的边距。您正在以正确的方式使用apply函数,因此匿名函数将应用于输入矩阵的每一列并返回一个矩阵。唯一的问题是输入矩阵的列是相似的,因此输出矩阵中的所有列也都相似。

有一个更简单的解决方案来获取输出矩阵:

x <- 1:8
f <- function(z) c(z,z^2,(z^2+z)%/%2)
m <- matrix(f(x), nrow = nrow(x), ncol = 3)

虽然它没有使用apply,但我希望它有所帮助。