2017-04-09 54 views
0

我寫了一個函數,它查找兩個字符串之間的交集。我想在應用中使用這個函數並找出給定數據框中的所有交叉點。我使用下面的代碼。參數「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」 與沒有默認失蹤錯誤

apply(df, 1, common) 

莫非你可以幫我解決這個問題嗎?

+3

嘗試'mapply(通用,東風$ STR1,DF $ STR2)' –

回答

2

apply()只會將一個矢量傳遞給您提供的函數。使用margin=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) 
} 

雖然並不多參數很好地擴展。你也可以使用Mapmapply多個向量同時迭代

如果您的原始功能,你可以做

with(df, Map(common, str1, str2)) 
相關問題