6

R私には、と呼ばれる番号があり1293828893ますx

この番号を分割して、真ん中の4桁を削除して3828返すようにしたいのですが、擬似コードは次のとおりです。

splitnum <- function(number){
     #check number is 10 digits
     if(nchar(number) != 10){
          stop("number not of right size");
     }
     middlebits <- middle 4 digits of number
     return(middlebits);
}

これは非常に単純な質問ですが、私が見つけた唯一の解決策は、数値文字列ではなく文字列に適用されます。

R興味があれば、Middle-squareメソッドの実装を作成しようとしていますが、この手順は特に注意が必要です。

4

3 に答える 3

9

使用できますsubstr()。そのヘルプ ページを参照してください?substr。あなたの機能では、私は次のようにします:

splitnum <- function(number){
    #check number is 10 digits
    stopifnot(nchar(number) == 10)
    as.numeric(substr(number, start = 4, stop = 7))
}

与える:

> splitnum(1293828893)
[1] 3828

数字を文字列として表示する最後の行の折り返しを削除しas.numeric(....)ます。

于 2012-10-09T19:45:36.543 に答える
8

整数除算を使用するだけです:

> x <- 1293828893
> (x %/% 1e3) %% 1e4
[1] 3828
于 2012-10-09T19:43:02.050 に答える
6

これは、数値を文字に変換することを完全に回避する関数です

splitnum <- function(number){
     #check number is 10 digits
     if(trunc(log10(X))!=9) {
          stop("number not of right size")
     }
     (number %/% 1e3) %% 1e4
}

splitnum(1293828893)
# [1] 3828
于 2012-10-09T19:45:31.667 に答える