r - R 警告:条件的长度 > 1,并且只会使用第一个元素。外功能
问题描述
我有以下两个功能:
name_fitting <- function(term1, term2)
{
if (nchar(term1) <= 3)
{
temp <- substring(term2, 1,nchar(term1))
return(temp==term1)
}
else {return(grepl(term1, term2))}
}
name_matching <- function(name1, name2)
{
name1 <- gsub('[[:punct:]]+','', name1)
name2 <- gsub('[[:punct:]]+','', name2)
if (length(intersect(as.character(unlist(strsplit(name1, ' '))), as.character(unlist(strsplit(name2, ' '))))) > 1) {return(TRUE)}
if (length(intersect(as.character(unlist(strsplit(name1, ' '))), as.character(unlist(strsplit(name2, ' '))))) == 1)
{
non_matching <- union(setdiff(as.character(unlist(strsplit(name1, ' '))), as.character(unlist(strsplit(name2, ' ')))), setdiff(as.character(unlist(strsplit(name2, ' '))), as.character(unlist(strsplit(name1, ' ')))))
temp <- outer(X = non_matching, Y = non_matching, FUN = 'name_fitting')
diag(temp)<-FALSE
return(any(temp))
}
else(return(FALSE))
}
name_fitting 用于 name_matching。name_matching 检查传递给函数的两个名称是否兼容并返回 TRUE 或 FALSE。
当我尝试匹配以下两个名称时:
name1<-"MARCO BRAMBILLA"
name2<-"M BRAMBILLA BRANDUARDI"
我收到以下警告:
条件的长度 > 1 并且只使用第一个元素
表示外部函数没有正确地将数据传递给 name_fitting。
我该如何解决?
解决方案
您的函数将 name_fitting 传递给non_matching
包含三个元素的字符向量:[1] "MARCO" "M" "BRANDUARDI"
. 这个向量被传递给if
call if (nchar(term1) <= 3)
。问题是它nchar(term1) <= 3
给出了一个长度为 3: 的向量[1] FALSE TRUE FALSE
。
当然,问题是你想在这里实现什么。如果您想弄清楚 term1 是否具有三个或更多元素,请替换nchar
为length
. 如果您试图查看 non_matching 的任何元素是否为 3 个字符或更少,请将 nchar() 调用放在any()
. 如果您试图仅检查 non_matching 的第一个元素,请通过term1[1]
而不是term1
.
推荐阅读
- installation - 未找到 CMake 错误变量 LIBXML2_INCLUDE_DIR (Gate-9.0)
- javascript - 检查 div 是否有类然后动画
- typo3 - 在 fe_users 中自动填写字段名称
- objective-c - “AXUIElementCopyAttributeValues”返回“kAXErrorAPIDisabled”
- php - 排队的 Laravel 通知卡在 AWS SQS 上
- c - 如果在已分配的内存上使用 strdup 会发生什么
- reactjs - 我在我的 React Native 文件夹项目中安装了这个包,但总是看起来像这样:EPERM
- python - 如何在python中仅从txt文件中提取第一个和最后一个数值?
- python - Python 记忆手动缓存
- c - GCC 外部库