如何使矩阵可调用函数的元素

时间:2014-10-23 19:23:07

标签: r matrix

我想制作一个函数矩阵(我写的)。然后以元素方式访问它们并调用。

所以我有:func1(x)func2(y)func3(z)func4(t)这四个R函数我写得很好。他们返回数字。

现在,如果我这样做:

a_matrix <- matrix(c(a=func1,b=func2,c=func3,d=func4),2,2)
a_func<-a_matrix[1,1]
a_func(x)

我收到以下错误:

error:attempt to call non-function.

如果我使用列表,则代替矩阵,

a_list<-list(a=func1,b=func2,c=func3,d=func4)
a_func<-list$a
a_func(x)

给出预期结果

typeof(list$a)
[1] "closure" 

如果我这样做:

typeof(a_matrix)
[1] "list"
typeof(a_matrix[1,1])
[1] "list"

(我正在使用R 3.1.1)

1 个答案:

答案 0 :(得分:6)

当你创建这样的非原子矩阵时,它们基本上被制作成花哨的列表。在索引方面,类似的规则适用于常规列表;即[ ]将始终返回另一个列表,[[ ]]将提取没有列表包装器的元素。你真的想要

func1 <- function(x) x+1
func2 <- function(x) x+2
func3 <- function(x) x+3
func4 <- function(x) x+4

a_matrix <- matrix(c(a=func1,b=func2,c=func3,d=func4),2,2)

a_func <- a_matrix[[1,1]]
a_func(5)
# [1] 6

如果你做了

,你的标准列表语法会得到相同的结果
a_list <- list(a=func1,b=func2,c=func3,d=func4)
a_func <- a_list["a"]
a_func(5)
# Error: could not find function "a_func"
a_func <- a_list[["a"]]
a_func(5)
# [1] 6