7

重複の可能性:
複数の出力を持つ関数

これは簡単な質問のように思えますが、私はそれを理解することができず、私が見たRマニュアルに運がありませんでした。を見つけたいのですが、一行で割り当てdim(x)たいですdim(x)[1]adim(x)[2]b

私は試しまし[a b] <- dim(x)c(a, b) <- dim(x)が、どちらもうまくいきませんでした。これを行うための1行の方法はありますか?扱いやすい非常に基本的なもののようです。

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で最も効率的なものではありませんが、私はこれを複数回使用しました。個人的には、エントリ数が不明なフォルダから情報を収集するときに特に便利だと思います。

編集:そしてこの場合、出力は任意の長さにすることができます(VariablesListが長い限り)。

編集#2:Lizが提案したように、VariablesListベクトルを変更して、より多くの値を使用できるようにしました。

于 2012-07-25T14:33:43.950 に答える
1

a常にグローバルなandを作成する独自の関数を作成することもできますb。しかし、これはお勧めできません:

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

これを行う方法があるようには見えません。これに対処する唯一の方法は、次の 2 行を追加することです。

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

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

于 2012-07-25T14:03:25.850 に答える