这似乎是一个简单的问题,但我无法弄清楚,我在看过的R手册中没有运气。我想找到dim(x)
,但我希望将dim(x)[1]
分配给a
,将dim(x)[2]
分配给b
一行。
我已尝试[a b] <- dim(x)
和c(a, b) <- dim(x)
,但两项都没有效果。有一条单行方式吗?这似乎是一件非常基本的事情应该很容易处理。
答案 0 :(得分:1)
您还可以编写自己的函数,始终创建全局a
和b
。但这不可取:
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)
这取决于a
和b
中的内容。如果他们只是数字,请尝试返回这样的矢量:
dim <- function(x,y)
return(c(x,y))
dim(1,2)[1]
# [1] 1
dim(1,2)[2]
# [1] 2
如果a
和b
是其他内容,您可能想要返回一个列表
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")