こにしき(言葉・日本社会・教育)

関西学院大学(2016.04~)の寺沢拓敬のブログです(専門:言語社会学)。

二人の相性(%)を瞬時に判定するR関数

この前、教えている学生が、チラシの裏にびっしりと数字を書き込んでいた。

http://p.cdnanapi.com/r/20101212/20101212234922.jpg

サイコな雰囲気が醸しだされていて、けっこう気持ち悪い光景だったんだけれど、聞いてみると「名前占い」とのこと。


プロポーズ大作戦の3話であってた相性占いってどうやってするん... - Yahoo!知恵袋


要は、名前の母音を数字に置き換えて、その前後を足していって、2桁になったら相性が出る、ということらしい。


チラシの裏でわざわざそんなことしなくても、Rでできるよ☆」ということで、関数を作ってみた。きっとあの学生は喜ぶだろう。


以下をコンソールにコピペしてください

uranai <- function(NAME1,NAME2,PRINT=TRUE){

### 名前を統合 ### 
X <- unlist(strsplit(c(NAME1,NAME2),split=""))


### 名前の母音を文字列に変換 ###
 y <- NULL
for(i in 1:length(X)){
x <- X[i]
 ifelse( x == "あ" | x == "か"| x == "さ"| x == "た"| x == "な"| x == "は"| x == "ま"| x == "や"| x == "ら"| x == "わ"| x == "が"| x == "ざ"| x == "だ"| x == "ば"
   ,y[i] <- 1
,ifelse(x == "い"| x == "き"| x == "し"| x == "ち"| x == "に"| x == "ひ"| x == "み"| x == "り"| x == "ゐ"| x == "ぎ"| x == "じ"| x == "ぢ"| x == "び"
   ,y[i] <- 2
,ifelse(x == "う"| x == "く"| x == "す"| x == "つ"| x == "ぬ"| x == "ふ"| x == "む"| x == "ゆ"| x == "る"| x == "ぐ"| x == "ず"| x == "づ"| x == "ぶ"
   ,y[i] <- 3
,ifelse(x == "え"| x == "け"| x == "せ"| x == "て"| x == "ね"| x == "へ"| x == "め"| x == "え"| x == "れ"| x == "ゑ"| x == "げ"| x == "ぜ"| x == "で"| x == "べ"
   ,y[i] <- 4
,ifelse(x == "お"| x == "こ"| x == "そ"| x == "と"| x == "の"| x == "ほ"| x == "も"| x == "よ"| x == "ろ"| x == "を" | x == "ご"| x == "ぞ"| x == "ど"| x == "ぼ"
   ,y[i] <- 5
,ifelse(x == "ん"| x == "ー"
   ,y[i] <- 0
,NA))))))
}

### 計算 ### 
repeat{
 if(PRINT == TRUE) {print(y)}
 if(length(y) < 3){break}
 Y <- NULL
    for(i in 1:(length(y)-1) ){
      yy <- y[i]+y[i+1]
      ifelse( yy > 9, Y[i] <- yy-10 , Y[i] <- yy) 
      }
 y <- Y
}

### パーセンテージで出力 ###
paste("ふたりの相性は、" , 10*y[1] + y[2],"%", " です。",sep="")
}

関数のつかいかた

uranai ("1人目の名前" , "2人目の名前", PRINT)

uranai()の中に、占いたい2人のなまえを、それぞれ " " でくくってひらがなで入れればOK
ただし、ちいさい文字(ゃゅょ等)は大文字にしていれてください。また、名前の間はカンマで分かつことをお忘れなく。


PRINT=TRUE で計算過程を表示する。FALSEで表示しない。デフォルトはTRUE

使用例

> uranai("やべひろゆき","あおきゆうこ")
 [1] 1 4 2 5 3 2 1 5 2 3 3 5
 [1] 5 6 7 8 5 3 6 7 5 6 8
 [1] 1 3 5 3 8 9 3 2 1 4
[1] 4 8 8 1 7 2 5 3 5
[1] 2 6 9 8 9 7 8 8
[1] 8 5 7 7 6 5 6
[1] 3 2 4 3 1 1
[1] 5 6 7 4 2
[1] 1 3 1 6
[1] 4 4 7
[1] 8 1
[1] "81%"
> uranai("うちだゆうや","きききりん",PRINT=FALSE)
[1] "37%"
> uranai("たむらゆう","ふくたじゆんや",PRINT=TRUE)
 [1] 1 3 1 3 3 3 3 1 2 3 0 1
 [1] 4 4 4 6 6 6 4 3 5 3 1
 [1] 8 8 0 2 2 0 7 8 8 4
[1] 6 8 2 4 2 7 5 6 2
[1] 4 0 6 6 9 2 1 8
[1] 4 6 2 5 1 3 9
[1] 0 8 7 6 4 2
[1] 8 5 3 0 6
[1] 3 8 3 6
[1] 1 1 9
[1] 2 0
[1] "20%"