将函数的输出分配给R中的两个变量

时间:2012-07-25 13:55:02

标签: r

  

可能重复:
  function with multiple outputs

这似乎是一个简单的问题,但我无法弄清楚,我在看过的R手册中没有运气。我想找到dim(x),但我希望将dim(x)[1]分配给a,将dim(x)[2]分配给b一行。

我已尝试[a b] <- dim(x)c(a, b) <- dim(x),但两项都没有效果。有一条单行方式吗?这似乎是一件非常基本的事情应该很容易处理。

4 个答案:

答案 0 :(得分:1)

您还可以编写自己的函数,始终创建全局ab。但这不可取:

mydim <- function(x) {
  out <- dim(x)
  a <<- out[1]
  b <<- out[2]
}

“R”方法是将结果作为列表或向量输出,就像内置函数一样,并根据需要访问它们:

out <- dim(x)

out[1]

out[2]

R具有很好的列表和向量理解,许多其他语言缺乏,因此没有这种多重赋值功能。相反,它具有丰富的功能集,无需循环构造即可进入复杂的数据结构。

答案 1 :(得分:0)

看起来没有办法做到这一点。真的唯一的办法是添加几行:

temp <- dim(x)
a <- temp[1]
b <- temp[2]

答案 2 :(得分:0)

这可能不像您想要的那样简单,但这可以完成工作。如果您需要一次分配多个变量(并且您不知道您拥有多少个值),它在将来也是一个非常方便的工具。

Output <- SomeFunction(x)
VariablesList <- letters[1:length(Output)]
for (i in seq(1, length(Output), by = 1)) {
    assign(VariablesList[i], Output[i])
}

循环不是R中最有效的东西,但我多次使用它。我个人觉得从收集条目数量不明的文件夹中收集信息时特别有用。

编辑:在这种情况下,输出可以是任意长度(只要VariablesList更长)。

编辑#2:改变了VariablesList矢量以允许更多的值,正如Liz建议的那样。

答案 3 :(得分:-1)

这取决于ab中的内容。如果他们只是数字,请尝试返回这样的矢量:

dim <- function(x,y) 
    return(c(x,y))
dim(1,2)[1]
# [1] 1
dim(1,2)[2]
# [1] 2

如果ab是其他内容,您可能想要返回一个列表

dim <- function(x,y)
    return(list(item1=x:y,item2=(2*x):(2*y)))
dim(1,2)[[1]]
[1] 1 2
dim(1,2)[[2]]
[1] 2 3 4

编辑:

试试这个:x <- c(1,2); names(x) <- c("a","b")