如何在列表中获取函数的各个元素并将它们放入 R 中的矩阵中?
how do I get individual elements of functions in a list and put them in a matrix in R?
编辑:包含示例结果
我创建了这样的函数:
Ex1 = function(a,b,c) 1 * a + 2 * b + 3 * c + 4
Ex2 = function(a,b,c)
Ex3 = function(a,b,c)
etc..
并将它们放入列表中:
exList = list(Ex1,Ex2,Ex3,etc.)
现在我必须使用函数来获取各个元素([a,b,c] 和数字(分别))
我在大多数情况下都遇到了麻烦,尝试过 substring 和 split 都无济于事(或者我只是没有正确使用它),因为我确实知道如何创建矩阵。
结果示例为:
a b c RHS
1 1 2 3 4
2 5 6 7 8
3 9 10 11 12
但长话短说,我需要创建一个增广系数矩阵。
任何帮助都会很棒。谢谢!
您可以像这样提取数字:
Ex1 <- function(a,b,c) 1 * a + 2 * b + 3 * c + 4
foo <- function(x) {
if(length(x) > 1) {
res <- lapply(x, foo)
} else {
res <- if(is.numeric(x)) x else NA
}
na.omit(unlist(res))
}
foo(body(Ex1))
#[1] 1 2 3 4
但是,我强烈建议您改变整个方法。可能是这样的:
coefs <- list(c1 = c(1, 2, 3, 4), c2 = c(5, 6, 7, 8))
callerFun <- function(a, b, c, coefs) c(cbind(a, b, c, 1) %*% coefs)
#example use
a <- 1:2
b <- 3:4
c <- 5:6
lapply(coefs, callerFun, a = a, b = b, c = c)
#$c1
#[1] 26 32
#
#$c2
#[1] 66 84
编辑:包含示例结果
我创建了这样的函数:
Ex1 = function(a,b,c) 1 * a + 2 * b + 3 * c + 4
Ex2 = function(a,b,c)
Ex3 = function(a,b,c)
etc..
并将它们放入列表中:
exList = list(Ex1,Ex2,Ex3,etc.)
现在我必须使用函数来获取各个元素([a,b,c] 和数字(分别))
我在大多数情况下都遇到了麻烦,尝试过 substring 和 split 都无济于事(或者我只是没有正确使用它),因为我确实知道如何创建矩阵。
结果示例为:
a b c RHS
1 1 2 3 4
2 5 6 7 8
3 9 10 11 12
但长话短说,我需要创建一个增广系数矩阵。
任何帮助都会很棒。谢谢!
您可以像这样提取数字:
Ex1 <- function(a,b,c) 1 * a + 2 * b + 3 * c + 4
foo <- function(x) {
if(length(x) > 1) {
res <- lapply(x, foo)
} else {
res <- if(is.numeric(x)) x else NA
}
na.omit(unlist(res))
}
foo(body(Ex1))
#[1] 1 2 3 4
但是,我强烈建议您改变整个方法。可能是这样的:
coefs <- list(c1 = c(1, 2, 3, 4), c2 = c(5, 6, 7, 8))
callerFun <- function(a, b, c, coefs) c(cbind(a, b, c, 1) %*% coefs)
#example use
a <- 1:2
b <- 3:4
c <- 5:6
lapply(coefs, callerFun, a = a, b = b, c = c)
#$c1
#[1] 26 32
#
#$c2
#[1] 66 84