255-如何解决R包检查中出现的non-ASCII characters问题
刘小泽写于2022.05.21
前言
最近收到CRAN的提醒,说是R包出现了一些非ASCII字符
因为没有遇到过,所以直接搜索:
一般这种情况都是因为R包中的data
内置数据集出现了非ASCII字符
其中的答案意思都是用函数进行转换,其中我们可以用 stringi::stri_enc_toascii()
问题的关键
我们知道了怎么处理,那么需要处理哪些数据呢?
这里可以采用stringi::stri_enc_isascii
进行判断
如果你不止一个数据集,那么强烈建议循环处理
举个例子:
files = list.files('./data',recursive = T)
sapply(files, function(f){
load(paste0('./data/',f))
stringi::stri_enc_isascii(f)
})
# a.rda b.rda c.rda d.rda
# TRUE TRUE FALSE TRUE
# e.rda f.rda g.rda
# TRUE TRUE TRUE
这里发现c这个数据集有问题,那么单独拿出来看看
# 如果要循环,套一个sapply即可
f = "c.rda"
apply(eval(parse(text=gsub('.rda','',f))), 2, function(x){
length(which(!stringi::stri_enc_isascii(x)))
})
# c.rda
# A 15
# B 108
# C 0
# D 0
这样加起来正好是CRAN告知的123个字符
解决问题
最后只需要把A、B两列转换一下:
c$A <- stringi::stri_enc_toascii(c$A)
c$B <- stringi::stri_enc_toascii(c$B)
最后再次运行上一步👆代码判断一下,看看是否正确了
提交前别忘了检查
写完R包一定要先检查各个平台的适用性,等到CRAN或者Bioconductor催你就不好了
rhub
就是这样一个非常方便的包
首先看看它支持的检查平台
rhub::platforms() %>% as.data.frame() %>% dplyr::pull(name)
[1] "debian-clang-devel" "debian-gcc-devel"
[3] "debian-gcc-devel-nold" "debian-gcc-patched"
[5] "debian-gcc-release" "fedora-clang-devel"
[7] "fedora-gcc-devel" "linux-x86_64-centos-epel"
[9] "linux-x86_64-rocker-gcc-san" "macos-highsierra-release"
[11] "macos-highsierra-release-cran" "macos-m1-bigsur-release"
[13] "solaris-x86-patched" "solaris-x86-patched-ods"
[15] "ubuntu-gcc-devel" "ubuntu-gcc-release"
[17] "ubuntu-rchk" "windows-x86_64-devel"
[19] "windows-x86_64-oldrel" "windows-x86_64-patched"
[21] "windows-x86_64-release"
然后一句命令检查
check(platform = 'windows-x86_64-devel')
可以看到这里我的这个问题解决了
最后,如果你想更省事的话,那就用循环吧,将所有平台都过一遍。。。