我写了一个找到两个字符串之间交集的函数。我想在应用中使用此函数并找出给定数据框中的所有交叉点。我正在使用下面的代码。
功能: -
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)
当使用apply时,我得到参数“second_str”缺失,没有默认错误
apply(df, 1, common)
你能帮我解决一下这个问题吗?
答案 0 :(得分: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)
}
虽然这对于多个参数来说不能很好地扩展。你也可以使用Map
或mapply
一次迭代多个向量
如果您可以执行原始功能
with(df, Map(common, str1, str2))