【发布时间】:2018-06-27 21:20:45
【问题描述】:
我正在尝试减少脚本中的重复代码,为此我正在创建一些辅助函数。
我正在处理的一个函数没有接受任何参数,而是使用已加载到全局环境中的数据集来创建一些子集,然后返回这些 data.frames。
我在下面创建了一个简单的示例,它与我所描述的不完全一样,但会给出其结构的概念。
# Create function
my_func <- function(){
a <- as.data.frame("ID" = c(1, 2, 3, 4, 5, 6),
"TYPE" = c(1, 1, 2, 2, 3, 3),
"CLASS" = c(1, 2, 3, 4, 5, 6))
b <- as.data.frame("ID" = c(1, 2, 3, 4, 5, 6),
"STATUS" = c(1, 1, 2, 2, 3, 3))
return(list(a, b))
}
# Call to the function
list[a, b] <- my_func()
我遇到的问题不在函数内部,而是在调用函数并尝试存储结果时。 如果我这样调用函数:
my_func()
它将 2 个 data.frames 打印为列表,但是,当尝试为它们分配名称时,它给了我 a does not exist 的错误。
我假设我只是错误地退回它们或试图错误地存储它们。
谢谢!
更新
作为参考,我尝试使用此语法的原因是由于这篇文章:How to assign from a function which returns more than one value?
另外,我希望在 1 行中捕获返回,而不必单独分配它。
例如,在这种情况下,很容易将其分配为:
test <- my_func()
a <- test[[1]]; b <- test[[2]]
但是,如果我有一个更长的列表,这将变得非常乏味。
【问题讨论】:
-
我不太清楚你在问什么,但似乎你只是想将
return更改为return(list(a = a, b = b)) -
如果你不想在函数中硬编码,
setNames(my_func(),c("a","b"))。 -
@Ryan 我已经这样尝试过了,但它仍然给了我同样的错误。
-
哪一行给你这个错误?
-
从他写这个答案的方式可能有点难以分辨,但该语法取决于他编写的自定义函数(他链接到定义)并且他随后添加到他的一个包。但它不是 R 本身的一部分。