2017-04-09 93 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))