【问题标题】:how do I get individual elements of functions in a list and put them in a matrix in R? [closed]如何在列表中获取函数的各个元素并将它们放入 R 中的矩阵中? [关闭]
【发布时间】:2021-03-08 06:13:02
【问题描述】:

编辑:包含一个示例结果

我创建了这样的函数:

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 中提取c(1, 2, 3, 4)?如果以后需要提取这些值,为什么要以这种方式创建这些函数?与其编写从函数体中提取数字的复杂方法,不如修复前面的步骤。
  • 正如@Roland 所说,我认为您需要退后一步,考虑您正在尝试做什么以及您是否正确使用了函数。 Here's 一些关于在 R 中构建函数的信息。
  • @Roland 是的,我需要从所述函数中提取数字。我提供的示例应该输入到控制台中,这就是我这样写的原因。并且必须在调用应该从给定函数创建矩阵的函数之前将它们添加到列表中。但是,仍然感谢您的帮助和
  • @JosephCrispell 也感谢您的帮助。

标签: r matrix coefficients


【解决方案1】:

你可以像这样提取数字:

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

【讨论】:

  • 我有一个迟到的问题,如果我还能问的话。有没有办法在数字上也得到负号?例如,我有 [1,2,3,4] 来自函数,但 3 是原始的 -3。是否可以运行该函数的第二个副本以使其为负数,或者是否有允许我这样做的函数?谢谢。 @罗兰
  • 是的,这是可能的。令我惊讶的是,您仍在走这条曲折的道路,而不是仅仅修复您的整体方法。
  • 顺便说一句,我有一个明显的印象,即通过递归爬取调用树来计算语言超出了您当前的技能水平。我真的不认为你这样做是在帮自己一个忙。您可能不了解它是如何工作的,并且无法维护它。我可以轻松地做你所要求的,但我不会在我自己的代码中。这只是一个糟糕的方法。
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 2022-08-04
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
相关资源
最近更新 更多