2017-04-09 10 views
0

私は2つの文字列の間の交差を見つける関数を書いています。私はapplyでこの関数を使い、与えられたデータフレーム内のすべての交点を見つけたいと思います。私は以下のコードを使用しています。引数 "second_str"がデフォルト値なしでありません

機能: -

common <- function(first_str,second_str) 
    { 
    a <- unlist(strsplit(first_str," ")) 
    b <- unlist(strsplit(second_str," ")) 
    com <- intersect(a,b) 
    return((length(com)/length(union(a,b)))*100) 
    } 

データフレーム: -

str1 <- c("One Two Three","X Y Z") 
str2 <- c("One Two Four", "X Y A") 

df <- data.frame(str1, str2) 

使用は、私が "second_strが" NOデフォルトで不足している引数エラーが出るアプライ

apply(df, 1, common) 

でしたあなたは解決策で私を助けてください?

+3

を行うことができ、あなたの本来の機能は '' mapply(共通、DFます$ str1は、DFの$のSTR2を)しようとすると、また時間

に複数のベクトルを反復処理するためにMapまたはmapplyを使用することができます –

答えて

2

apply()は、提供する関数に1つのベクトルだけを渡します。 margin=1を使用すると、「現在の」行のすべての値を含む単一のベクトルを使用して、各行ごとに1回ずつ関数を呼び出します。これらの値を関数の複数のパラメーターに分割することはありません。それは、複数のパラメータのためにうまくスケールしませんが

代わり

common2 <- function(x) { 
    first_str <- x[1] 
    second_str <- x[2] 
    a <- unlist(strsplit(first_str," ")) 
    b <- unlist(strsplit(second_str," ")) 
    com <- intersect(a,b) 
    return((length(com)/length(union(a,b)))*100) 
} 

にあなたの関数を再書くことができます。あなたは

with(df, Map(common, str1, str2)) 
関連する問題