0

次のようなループの結果を使用して数値ベクトルを作成したいと思います。

> for (i in 1:5) print(i+1)
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6

'print'のない同じ式が何も返さないのは奇妙に思えます

> for (i in 1:5) i+1
>

誰かが説明/解決策を持っていますか?

4

2 に答える 2

6

これは標準的な動作です。数値ベクトルを作成したい場合は、 printそれを実行しません。

forループの式は、プリミティブ関数の引数です。for

?`for`値セクションから

for、while、repeatは目に見えない形でNULLを返します。varをseqの最後に使用された要素に設定するか、長さがゼロの場合はNULLに設定します。

print結果をコンソールに出力します。

for(i in 1:5) i + 1

i + 1反復ごとに計算するだけで、何も返しません

何かを割り当てたい場合は、を使用して割り当てます<-assign


を使用すると、明示的なループを回避できますsapply。これは、成長するベクトルの落とし穴を回避する必要があります

results <- sapply(1:5, function(i) { i + 1})
于 2012-11-09T01:10:09.740 に答える
1

率直に言って、これよりも優れた解決策があるはずです

loopee <- function(x){
  res <- vector(mode = "numeric", length(x))
  for (i in 1:x) {res[i] <- i+1}
  return(res)}

> loopee(5)
[1] 2 3 4 5 6
于 2012-11-09T01:12:48.150 に答える