[英]apply function in r (with matrix and function)
我正在尝试使用 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
我们创建一个函数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
循环遍历每一列,但每个函数都应用于所有列,并且结果被连接起来。
apply
函数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
,但我希望它有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.