重複の可能性:
複数の出力を持つ関数
これは簡単な質問のように思えますが、私はそれを理解することができず、私が見たRマニュアルに運がありませんでした。を見つけたいのですが、一行で割り当てdim(x)
たいですdim(x)[1]
。a
dim(x)[2]
b
私は試しまし[a b] <- dim(x)
たc(a, b) <- dim(x)
が、どちらもうまくいきませんでした。これを行うための1行の方法はありますか?扱いやすい非常に基本的なもののようです。
重複の可能性:
複数の出力を持つ関数
これは簡単な質問のように思えますが、私はそれを理解することができず、私が見たRマニュアルに運がありませんでした。を見つけたいのですが、一行で割り当てdim(x)
たいですdim(x)[1]
。a
dim(x)[2]
b
私は試しまし[a b] <- dim(x)
たc(a, b) <- dim(x)
が、どちらもうまくいきませんでした。これを行うための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ベクトルを変更して、より多くの値を使用できるようにしました。
a
常にグローバルなandを作成する独自の関数を作成することもできますb
。しかし、これはお勧めできません:
mydim <- function(x) {
out <- dim(x)
a <<- out[1]
b <<- out[2]
}
これを行う「R」の方法は、組み込み関数と同じように結果をリストまたはベクトルとして出力し、必要に応じてそれらにアクセスすることです。
out <- dim(x)
out[1]
out[2]
R には、他の多くの言語にはない優れたリストとベクトルの理解があるため、この複数代入機能はありません。代わりに、構造をループせずに複雑なデータ構造に到達するための豊富な関数セットがあります。
これを行う方法があるようには見えません。これに対処する唯一の方法は、次の 2 行を追加することです。
temp <- dim(x)
a <- temp[1]
b <- temp[2]
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")