有没有办法输出,例如2个对象没有使用list()
?
my.fun=function(vector, index)
{
a=fun.a(vector, index)
b=fun.b(vector, index)
output=list(a,b)
}
或者输出2个对象列表?考虑到我也可以:
c=fun.a(vector, index)
d=fun.b(vector, index)
并希望list(a,b)
和另一个list(c,d)
用于相同的功能。
这只是我正在寻找的一个小例子,我的函数应用于大型对象,我将它们作为列表导出,但是我想导出一个中间计算。一种选择是在同一列表中合并所有,但我想知道是否有另一种解决方案。
答案 0 :(得分:10)
你只能在一个函数中return
一个对象。但是你有其他选择。您可以将中间对象分配给全局环境(您需要注意不要覆盖任何内容),或者您可以将环境传递给您的函数并为其分配对象。
以下是后一个建议的一个例子:
fun <- function(x, env) {
env$x2 <- x^2
x^3
}
set.seed(21)
x <- rnorm(10)
myEnv <- new.env()
fun(x, myEnv)
# [1] 4.987021e-01 1.424421e-01 5.324742e+00 -2.054855e+00 1.061014e+01
# [6] 8.125632e-02 -3.871369e+00 -8.171530e-01 2.559674e-04 -1.370917e-08
myEnv$x2
# [1] 6.288699e-01 2.727464e-01 3.049292e+00 1.616296e+00 4.828521e+00
# [6] 1.876023e-01 2.465527e+00 8.740486e-01 4.031405e-03 5.728058e-06
答案 1 :(得分:8)
我发现list2env
非常适合你所描述的内容;对我来说,最棘手的一点是找出了env
参数的内容:
f=function(){
list(a=1,b="my string")
}
ret=f()
list2env(ret,env=environment())
#a=ret$a;b=ret$b #Same as previous line
print(a);print(b) #1 and "my string"
答案 2 :(得分:3)
我相信你只能使用列表,但你可以将它们组合起来:
> list(list(a=1, b=2), list(c=3, d=4))
[[1]]
[[1]]$a
[1] 1
[[1]]$b
[1] 2
[[2]]
[[2]]$c
[1] 3
[[2]]$d
[1] 4
答案 3 :(得分:3)
return()
对象需要是一件事...... list
或vector
。如果你想把其他东西“推”到全局(或其他环境),你可以使用<<-
,虽然这被认为是不好的做法。