[解決済み] "戻るべき機能がなく、トップレベルへジャンプ"
質問
何が問題なのか理解できないので、どなたか助けてください。私はRを学び始めたばかりです(数日前)。私はMarsenne数を作成した後、すべてのMarsenne素数を与える関数を構築する必要があります。私が作成した関数は3つあります。 1) factorlist 単純にある数のすべての因子を求める関数です。 2) マルセンヌ数とは、マルセンヌ数を作成する関数です。 3) CheckForMersennePrimes は、創設されたメルセンヌ数が素数かどうかをチェックする関数です。 ***関数 "primes"は、0からxまでの区間にあるすべての素数を与える。
問題は 最初の2つの関数は完全に動作する。しかし、3番目の関数は動作せず、以下のようなエラーが発生します。何が間違っているのか全く理解できません。Mersenne数はすべて素数ではないので、MersenneNumberの集合を調べて、その中のすべての要素が素数かどうかをチェックし、それを取り除くということをやってみたのです。
どなたか、何が間違っているのかを見つける手助けをしていただけませんか?
以下は私の関数です。
factorlist<-function(x) {
if (x<2) {return ("Invalid input")}
if (x%%1!=0) {return ("Invalid input")}
if (x==2) {return(2)}
if (x==3) {return(3)}
vec<-0
for(i in 1:x){
if(x%%i==0){
vec[length(vec)]<-i
vec<-c(vec,0)
}
}
vec<-vec[-length(vec)]
vec<-vec[-length(vec)]
return(vec)
}
primes <- function(n){
primesR <- function(p, i = 1){
f <- p %% p[i] == 0 & p != p[i]
if (any(f)){
p <- primesR(p[!f], i+1)
}
p
}
primesR(2:n)
}
MarsenneNumber<-function(x){
vec<-c(0)
for (i in 3:x){
vec<-union(vec, c(2^primes(i)-1))
}
return(vec[-length(1)])
}
CheckForMersennePrimes<-function(x){
b<-length(MarsenneNumber(x)){
for (i in 1:b){
vec<-MarsenneNumber(x){
if (factorlist(vec[i])!=1){
vec<-c(-vec[i])
}
}
}
}
return(vec)
}
最後の関数は私のミスです。
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in " }"
> }
Error: unexpected '}' in " }"
> return(vec)
Error: no function to return from, jumping to top level
> }
Error: unexpected '}' in "}"
以下に、この機能の動作例を示します。
> factorlist(20)
[1] 1 2 4 5 10
> primes(20)
[1] 2 3 5 7 11 13 17 19
> MarsenneNumber(20)
[1] 3 7 31 127 2047 8191 131071 524287
解決方法は?
CheckForMersennePrimes
は余分な
{}
のように、この関数の2行目と4行目(forループの中)にあります。
vec<-MarsenneNumber(x){if()...}
余分な中括弧を削除しました。
CheckForMersennePrimes <- function( x ){
b <- length( MarsenneNumber( x ) )
for ( i in 1:b ){
vec <- MarsenneNumber( x )
if ( factorlist( vec[i] ) != 1 ){
vec <- c( -vec[i] )
}
}
return( vec )
}
の値を取得することだと思います。
vec
その中で
factorlist(vec[i])
は1に等しい。 もしこれが真実なら、あなたは
vec
をforループの外側で実行し、この条件を確認します。そして最後に
a1
を含む、すべての
vec
を渡す値です。
if
という条件があります。
また、あなたのコードを短くするために
b
変数があります。これは必要ありません。代わりに、次のようにします。
seq_along(vec)
. を使わなくても同じことができます。
b
という変数があります。
CheckForMersennePrimes <- function( x ){
vec <- MarsenneNumber( x )
a1 <- c()
for ( i in seq_along( vec ) ){
if ( factorlist( vec[i] ) == 1 ){
a1 <- c( a1, vec[i ] )
}
}
return( a1 )
}
さらにコードを凝縮しても、同じ出力が得られます。私は
seq_along
とインデックスを作成し
vec
CheckForMersennePrimes <- function( x ){
vec <- MarsenneNumber( x )
a1 <- c()
for ( i in vec ){
if ( factorlist( i ) == 1 ) {
a1 <- c( a1, i )
}
}
return( a1 )
}
関連
-
[解決済み】基本 - T-検定 -> グループ化因子は正確に2水準でなければならない
-
[解決済み】LMEモデルのレベル0、ブロック1でのバックソルブにおける特異性
-
[解決済み】値を置き換えようとすると、"データフレームの添え字の割り当てで欠損値は許可されない"
-
[解決済み】RでKNN。trainとclassは長さが違う」?
-
[解決済み】R Markdown - html出力でフォントサイズとフォントタイプを変更する
-
[解決済み] テスト
-
[解決済み】Rで相対的な頻度をプロットするためにhistをどのように使用しますか?
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] コマンドラインからRスクリプトを実行する
-
[解決済み】Rでリストを正しく使用する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プロット時に 'x' と 'y' の長さが異なる ERROR が発生する。
-
[解決済み】lis[[i]]のエラー:1つ未満の要素を選択しようとした場合
-
[解決済み】RでのMLEエラー:'vmmin'の初期値が有限でない
-
[解決済み】bstTreeの予測値の混乱行列、エラー:'The data must contain some levels that overlap reference'.
-
[解決済み】 lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) のエラー : 'y' の NA/NaN/Inf, あらゆる方法を試したが解決しなかった。
-
[解決済み】Rの整数オーバーフローとは何ですか、そしてどのように起こるのですか?
-
[解決済み】Rでのデータ操作。'X'はアトミックでなければならない
-
[解決済み] na.fail.defaultのエラー:オブジェクトの値が見つからない - しかし、値が見つからないことはありません。
-
[解決済み】forループを実行すると「要因のレベルセットが異なる」というエラーが発生する
-
[解決済み】dplyr: "Error in n(): 関数は直接呼ばれるべきではありません"