我想将在一个函数中创建的多个对象与另一个函数一起使用:
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
。
如何使用全局分配<<-
重用没有在函数中分配的所有对象?
答案 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)
您的问题与变量分配有关:您正在使用带有<-
符号的“简单”分配。这意味着变量在其块内分配,例如y
在test1()
内定义。这意味着您无法在外部重用它,因为它不是在test1()
之外定义的。要执行此操作,请尝试使用<<-
分配符号,该符号在较高环境中分配变量,从而允许在定义该变量的块之外重用该变量。