参数“second_str”缺失,没有默认值

时间:2017-04-09 14:58:52

标签: r

我写了一个找到两个字符串之间交集的函数。我想在应用中使用此函数并找出给定数据框中的所有交叉点。我正在使用下面的代码。

功能: -

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)

你能帮我解决一下这个问题吗?

1 个答案:

答案 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)
}

虽然这对于多个参数来说不能很好地扩展。你也可以使用Mapmapply一次迭代多个向量

如果您可以执行原始功能

with(df, Map(common, str1, str2))