7

可能重复:
具有多个输出的函数

这似乎是一个简单的问题,但我无法弄清楚,而且我在看过的 R 手册中也没有运气。我想 find dim(x),但我想在一行中分配dim(x)[1]toadim(x)[2]to 。b

我试过[a b] <- dim(x)and c(a, b) <- dim(x),但都没有奏效。有没有一种方法可以做到这一点?这似乎是一件非常基本的事情,应该很容易处理。

4

4 回答 4

1

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

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

循环不是 R 中最有效的东西,但我已经多次使用它。我个人发现它在从具有未知数量条目的文件夹中收集信息时特别有用。

编辑:在这种情况下,输出可以是任何长度(只要变量列表更长)。

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

于 2012-07-25T14:33:43.950 回答
1

您还可以编写自己的函数,该函数将始终生成全局ab. 但这是不可取的:

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

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

out <- dim(x)

out[1]

out[2]

R 具有许多其他语言所缺乏的出色的列表和向量理解能力,因此没有这种多重赋值功能。相反,它具有丰富的函数集,可以在没有循环结构的情况下进入复杂的数据结构。

于 2012-07-25T14:41:56.987 回答
0

看起来没有办法做到这一点。真正处理它的唯一方法是添加几行额外的行:

temp <- dim(x)
a <- temp[1]
b <- temp[2]
于 2012-07-25T14:25:49.853 回答
-1

这取决于a和中的内容b。如果它们只是数字,请尝试返回这样的向量:

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")

于 2012-07-25T14:03:25.850 回答