R 中的 Message() - 使用输出作为消息输入传递

Message() in R - using output to be passed as message inpuut

我正在写 if 语句,它检查是否重复。如果有任何我想继续执行,但是 return 一条消息指示哪些是重复的。我尝试了 message(),但不确定如何包含 locations.

的值
 if(anyDuplicated(regionGroups$location) > 0){
   duplicateRegions <- regionGroups[, 'count' := .N, by = location][count > 1, .SD[1], by = location][[1]]
   message("Location is not unique in the table regionGroups. There are length(duplicateRegions) duplicated locations, namely: duplicateRegions[1],duplicateRegions[2]  ")
   regionGroups <- regionGroups[!duplicated(regionGroups$location)]
 }


(anyDuplicated(regionGroups$location) > 0)
[1] TRUE

duplicateRegions
[1] 55100 26080

期望的输出是:

Location is not unique in the table regionGroups. There are 2 duplicated locations, namely: 55100, 26080

复杂的是可能有更多的重复区域并且数字会改变。

问题:如何编写 message() 语句以便输出将列出 duplicateRegions 的相应值?

嗨,这对你有用吗?我有点不确定如果您仍然要执行,为什么需要 if 语句,因为似乎不需要 else 元素,也许您为了简单起见而忽略了它。

另一点需要注意的是 duplicated 不会选择重复集中的第一个重复项,因此当您使用时: regionGroups[!duplicated(regionGroups$location),] 它总是会消除除第一个重复项以外的所有重复项。这对你来说可能没问题,但只是作为一个警告。

此外,如果您采用这种方法:namely: duplicateRegions[1],duplicateRegions[2] 在消息函数中,您假设您知道您将拥有多少重复项,但事实并非如此。您可以使用 paste(as.character(regionGroups$location[dups]), collapse = ", ")) 折叠字符串,这样您就不必担心了。


if(any(duplicated(regionGroups$location))){
  dups <- which(duplicated(regionGroups$location))
  dup_regions <- regionGroups$location[dups]
  message(" Location is not unique in the table regionGroups. There are ", 
          length(dups)," duplicated locations, namely: ", paste(as.character(regionGroups$location[dups]), collapse = ", "))
  regionGroups <- regionGroups[!duplicated(regionGroups$location),]
}