簡體   English   中英

在 r 中應用函數(帶有矩陣和函數)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM