如何在Tibco Spotfire自定义函数中用“NoMissingTimeSheets”替代Null输出
解决R函数替换空白/Null输出的问题
问题分析
原函数在setdiff无差异时会返回空字符串(而非NULL),你之前的if语句存在语法错误且未正确识别空结果,导致输出全空白。以下是两种可行的修正方案:
方案一:修改原函数直接处理空结果
在checkDifference函数内部判断结果是否为空,直接返回指定文本:
checkDifference = function(A,B) { Av = strsplit(A, ', ')[[1]] Bv = strsplit(B, ', ')[[1]] Cv = setdiff(Bv, Av) C = paste(Cv, collapse = ', ') # 当结果为空时返回指定文本 if (nchar(C) == 0) { return("NoMissingTimeSheets") } else { return(C) } } output = mapply(FUN = checkDifference, input1, input2)
方案二:保留原函数,后处理输出结果
如果不想改动原函数,可以在mapply执行后,批量替换空字符串和NULL值:
checkDifference = function(A,B) { Av=strsplit(A,', ')[[1]] Bv=strsplit(B,', ')[[1]] Cv=setdiff(Bv,Av) C=paste(Cv,collapse=', ') return (C) } output = mapply(FUN=checkDifference, input1, input2) # 替换空字符串与NULL值 output[output == "" | is.null(output)] = "NoMissingTimeSheets"
错误说明
你之前的代码存在两个问题:
- R中判断NULL的语法是
is.null(x),而非x isNull; mapply返回的是向量,单个if语句无法处理向量中的每个元素,需要向量化操作或在函数内部逐个判断。
内容的提问来源于stack exchange,提问作者P.Harper
相关产品推荐
相关产品推荐

