重用在函数中创建的多个对象

时间:2019-05-13 08:51:40

标签: r function

我想将在一个函数中创建的多个对象与另一个函数一起使用:

test1 <- function(x){
  y <- x + 1
  z <- x * 2
}

test2 <- function(...){
  test1(x)
  print(u <- y * z)
}

x <- 2

test2(test1)

它引发错误Error in print(u <- y * z) : object 'y' not found

如何使用全局分配<<-重用没有在函数中分配的所有对象?

2 个答案:

答案 0 :(得分:1)

我将简单的list()c()test1 <- function(x){ y <- x + 1 z <- x * 2 # if you don't use return these two won't leave test1 return(list(y=y, z=z)) # equivalent without return() is list(y=y, z=z) #or: list(y=y, z=z) } test2 <- function(...){ ret1 <- test1(x) print(ret1$y * ret1$z) #or: return(ret1$y * ret1$z) } 结合使用:

return()

请注意,由于自动返回了未在函数中分配的最后一个对象,因此不必使用return()

使用Split-Path可能有助于提高可读性。

有关return()的信息。

答案 1 :(得分:0)

您的问题与变量分配有关:您正在使用带有<-符号的“简单”分配。这意味着变量在其块内分配,例如ytest1()内定义。这意味着您无法在外部重用它,因为它不是在test1()之外定义的。要执行此操作,请尝试使用<<-分配符号,该符号在较高环境中分配变量,从而允许在定义该变量的块之外重用该变量。