R 如何编写使用另一个函数的单个输出作为新分析起点的函数?

R 如何编写使用另一个函数的单个输出作为新分析起点的函数?,r,loops,lapply,R,Loops,Lapply,我在编写调用另一个函数并使用输出作为在循环(或等效)中运行新分析的基础的函数时遇到问题。例如,假设函数1创建以下输出:10。第二个函数将以此作为运行新分析的起点。第二次输出的单个数据点将成为下一轮分析的基础,依此类推 这里有一个简单的例子。问题是如何为此创建for循环。或者也许有一种更有效的使用lappy的方法。在任何情况下,第一个函数可能如下所示: f.1 <-function(x) { x a <-seq(x,by=1,length.out=5) a.1 <-t

我在编写调用另一个函数并使用输出作为在循环(或等效)中运行新分析的基础的函数时遇到问题。例如,假设函数1创建以下输出:10。第二个函数将以此作为运行新分析的起点。第二次输出的单个数据点将成为下一轮分析的基础,依此类推

这里有一个简单的例子。问题是如何为此创建for循环。或者也许有一种更有效的使用lappy的方法。在任何情况下,第一个函数可能如下所示:

f.1 <-function(x) {
  x
  a <-seq(x,by=1,length.out=5)
  a.1 <-tail(a,1) 
}
f.2 <-function(x) {

  f.1 <-function(x) {
    a <-seq(x,by=1,length.out=5)
    a.1 <-tail(a,1) 
  }
  z <-f.1(x)
  y=z+1
  seq(y,by=1,length.out=5)
}

f.1您可以用两个参数来尝试f.2。第一个参数是初始化x所需的x值,n是要执行的迭代次数。函数的输出将是一个包含n行和5列的矩阵

  f.2 <-function(x, n) {
  c <- matrix(nrow=n, ncol=5)

  for (i in 1:nrow(c))
  {
    z <-f.1(x) ##if you have already defined your f.1(x) beforehand, there is no need to define it again in f.2. you can simply use z <- f.1(x) like it is done here
    y=z+1
    c[i,] = seq(y, by=1, length.out=5)
    x = c[i,5]
  }
  return(c)
}

f.2您可以用两个参数来尝试f.2。第一个参数是初始化x所需的x值,n是要执行的迭代次数。函数的输出将是一个包含n行和5列的矩阵

  f.2 <-function(x, n) {
  c <- matrix(nrow=n, ncol=5)

  for (i in 1:nrow(c))
  {
    z <-f.1(x) ##if you have already defined your f.1(x) beforehand, there is no need to define it again in f.2. you can simply use z <- f.1(x) like it is done here
    y=z+1
    c[i,] = seq(y, by=1, length.out=5)
    x = c[i,5]
  }
  return(c)
}

f.2您可以用两个参数来尝试f.2。第一个参数是初始化x所需的x值,n是要执行的迭代次数。函数的输出将是一个包含n行和5列的矩阵

  f.2 <-function(x, n) {
  c <- matrix(nrow=n, ncol=5)

  for (i in 1:nrow(c))
  {
    z <-f.1(x) ##if you have already defined your f.1(x) beforehand, there is no need to define it again in f.2. you can simply use z <- f.1(x) like it is done here
    y=z+1
    c[i,] = seq(y, by=1, length.out=5)
    x = c[i,5]
  }
  return(c)
}

f.2您可以用两个参数来尝试f.2。第一个参数是初始化x所需的x值,n是要执行的迭代次数。函数的输出将是一个包含n行和5列的矩阵

  f.2 <-function(x, n) {
  c <- matrix(nrow=n, ncol=5)

  for (i in 1:nrow(c))
  {
    z <-f.1(x) ##if you have already defined your f.1(x) beforehand, there is no need to define it again in f.2. you can simply use z <- f.1(x) like it is done here
    y=z+1
    c[i,] = seq(y, by=1, length.out=5)
    x = c[i,5]
  }
  return(c)
}

f.2magrittr
库(主要由
dplyr
使用)使这种类型的链接变得有些简单。一是明确职能,

f.1 <-function(x) {
  x
  a <- seq(x, by=1, length.out=5)
  a.1 <- tail(a,1) 
}


f.2 <-function(x) {
  y <- x+1
  seq(y, by=1, length.out=5)
}
正如@bondedust所提到的,您可以使用
Reduce
,尽管通常它希望反复使用相同的函数,所以您只需要翻转最常见的用例

Reduce(function(x,f) f(x), list(f.1, f.2), init=10)
# [1] 15 16 17 18 19

magrittr
库(最著名的是由
dplyr
使用)使这种类型的链接变得有些简单。一是明确职能,

f.1 <-function(x) {
  x
  a <- seq(x, by=1, length.out=5)
  a.1 <- tail(a,1) 
}


f.2 <-function(x) {
  y <- x+1
  seq(y, by=1, length.out=5)
}
正如@bondedust所提到的,您可以使用
Reduce
,尽管通常它希望反复使用相同的函数,所以您只需要翻转最常见的用例

Reduce(function(x,f) f(x), list(f.1, f.2), init=10)
# [1] 15 16 17 18 19

magrittr
库(最著名的是由
dplyr
使用)使这种类型的链接变得有些简单。一是明确职能,

f.1 <-function(x) {
  x
  a <- seq(x, by=1, length.out=5)
  a.1 <- tail(a,1) 
}


f.2 <-function(x) {
  y <- x+1
  seq(y, by=1, length.out=5)
}
正如@bondedust所提到的,您可以使用
Reduce
,尽管通常它希望反复使用相同的函数,所以您只需要翻转最常见的用例

Reduce(function(x,f) f(x), list(f.1, f.2), init=10)
# [1] 15 16 17 18 19

magrittr
库(最著名的是由
dplyr
使用)使这种类型的链接变得有些简单。一是明确职能,

f.1 <-function(x) {
  x
  a <- seq(x, by=1, length.out=5)
  a.1 <- tail(a,1) 
}


f.2 <-function(x) {
  y <- x+1
  seq(y, by=1, length.out=5)
}
正如@bondedust所提到的,您可以使用
Reduce
,尽管通常它希望反复使用相同的函数,所以您只需要翻转最常见的用例

Reduce(function(x,f) f(x), list(f.1, f.2), init=10)
# [1] 15 16 17 18 19

请看
Reduce
功能。请看
Reduce
功能。请看
Reduce
功能。请看
Reduce
功能。谢谢,technOslerphile。这正是我想要的。做得好。非常感谢!也就是说,Flick先生的回答也提供了信息。总的来说,这是一对很好的回答。问题解决了!谢谢,技术档案。这正是我想要的。做得好。非常感谢!也就是说,Flick先生的回答也提供了信息。总的来说,这是一对很好的回答。问题解决了!谢谢,技术档案。这正是我想要的。做得好。非常感谢!也就是说,Flick先生的回答也提供了信息。总的来说,这是一对很好的回答。问题解决了!谢谢,技术档案。这正是我想要的。做得好。非常感谢!也就是说,Flick先生的回答也提供了信息。总的来说,这是一对很好的回答。问题解决了!谢谢你的解决方案。当考虑technOslerphile的回答时,这是一个很好的补充。Reduce()洞察特别有用。在此之前不知道Reduce(),您已经非常清楚地说明了它的价值。做得很好。谢谢你的解决方案。当考虑technOslerphile的回答时,这是一个很好的补充。Reduce()洞察特别有用。在此之前不知道Reduce(),您已经非常清楚地说明了它的价值。做得很好。谢谢你的解决方案。当考虑technOslerphile的回答时,这是一个很好的补充。Reduce()洞察特别有用。在此之前不知道Reduce(),您已经非常清楚地说明了它的价值。做得很好。谢谢你的解决方案。当考虑technOslerphile的回答时,这是一个很好的补充。Reduce()洞察特别有用。在此之前不知道Reduce(),您已经非常清楚地说明了它的价值。干得好。