R 3.4.4与R 3.5中deparse函数输出不一致的兼容方案问询
解决R 3.4.4与R 3.5中deparse函数输出不一致的问题
遇到这个问题很正常——R 3.5版本对deparse()的默认行为做了调整,导致同样的代码在两个版本里输出不一样。先给你明确下具体差异:
版本间的输出差异
R 3.4.4 执行结果
> deparse(list(dec = 4L, b = "a"), control = "keepNA") [1] "list(dec = 4, b = \"a\")"
R 3.5 执行结果
> deparse(list(dec = 4L, b = "a"), control = "keepNA") [1] "list(4, \"a\")"
可以看到,R 3.5里默认不再保留列表元素的名称,而3.4.4会自动保留这部分信息。
统一输出的解决方案
要让两个版本的输出完全一致,我们可以根据当前R版本动态设置control参数:在R 3.5及以上版本中,额外加上"niceNames"控制选项来强制保留元素名称,而3.4.4版本只需要原有的"keepNA"就行。
具体实现代码如下:
dctrl <- if (getRversion() > "3.4.4") c("keepNA", "niceNames") else "keepNA" deparse(list(dec = 4L, b = "a"), control = dctrl)
运行这段代码后,不管是在R 3.4.4还是R 3.5里,都会输出带元素名称的结果:"list(dec = 4, b = \"a\")"
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

