1) 列表 我们可以在列表中返回所需的变量。
f2 = function(number) {
xx = NULL
savexx = NULL
savexx10 = NULL
for (i in 1:10) {
x = number*i
xx = c(xx,x)
}
list(save_phrase = "hello",
savexx = xx,
savexx10 = xx*10,
save = cbind(savexx,savexx10))
}
store = f2(1)
2) mget 另一种方法是使用mget,如果返回的变量的名称与本例一样:
f3 = function(number) {
xx = NULL
savexx = NULL
savexx10 = NULL
for (i in 1:10) {
x = number*i
xx = c(xx,x)
}
save_phrase = "hello"
savexx = xx
savexx10 = xx*10
save = cbind(savexx,savexx10)
mget(ls(pattern = "save"))
}
store = f3(1)
3) gsubfn gsubfn 可以将列表组件放入单独的变量中。运行后,save_phrase、savexx、savexx10 和 save 将作为单独的变量存在。
library(gsubfn)
list[save_phrase, savexx, savexx10, save] <- f2(1)
4) 附加虽然不建议这样做,但您可以这样做:
attach(f2(1), name = "f2")
这将在搜索列表中创建一个包含返回变量的条目,因此我们可以只引用save_phrase、savexx、savexx10 和save。我们可以使用 search() 和 ls("f2") 看到条目,我们可以使用 detach("f2") 删除条目。
5) 分配 另一种并非真正推荐但确实有效的可能性是将组件分配到特定环境中。现在save_phrase、savexx、savexx10和save都将存在于全球环境中。
list2env(f2(1), .GlobalEnv)
同样,这会将这些变量注入当前环境。如果当前环境是全局环境,则与上一行相同。
list2env(f2(1), environment())
6) 同样,我不太确定这是一个好主意,但我们可以修改 f 以将输出直接注入父框架。运行后save_phrase、savexx、savexx10和save都将存在于当前环境中。
f4 = function(number, env = parent.frame()) {
xx = NULL
savexx = NULL
savexx10 = NULL
for (i in 1:10) {
x = number*i
xx = c(xx,x)
}
env$save_phrase = "hello"
env$savexx = xx
env$savexx10 = xx*10
env$save = cbind(savexx,savexx10)
invisible(env)
}
f4(1)