如何处理具有 UTF-8 标记字符串的 R 包中的示例数据

How to handle example data in R Package that has UTF-8 marked strings

我想在我正在编写的 R 包中包含一个示例数据集(Twitter 推文和 metadata)。

我使用 Twitter API 下载了一个示例 data.frame 并将其保存为 .RData(带有相应的 .R 数据描述文件)在我的包中。

当我运行 R CMD检查时,我得到以下注意,

 * checking data for non-ASCII characters ... NOTE
 Note: found 287 marked UTF-8 strings

我尝试用 ASCII=TRUE 保存 data.frame,希望这能解决问题。但它仍然存在。关于如何在没有注释的情况下将 R CMD CHECK 更改为 运行 有什么想法吗?

(另外,如果这是解决方案,我愿意从示例数据中删除所有 UTF-8 标记的字符串)。谢谢!

来自 data.frame 的示例行:

First time in SF (@ San Francisco International Airport (SFO) - @flysfo in San Francisco, CA) https://t.co/1245xqxtwesr
  favorited favoriteCount replyToSN             created truncated replyToSID                 id replyToUID
1     FALSE             0      <NA> 2015-03-13 23:30:35     FALSE       <NA> 576525795927179264       <NA>
                                                   statusSource screenName retweetCount isRetweet retweeted
1 <a href="http://foursquare.com" rel="nofollow">Foursquare</a>  my_name93            0     FALSE     FALSE
      longitude    latitude
1 -122.38100052 37.61865062

以防以后对大家有用,我找到的解决方案是这样的:

UTF-8 标记的字符在数据集中,因为 Twitter 推文有时包含表情符号。

我得到的建议是,除了删除所有 UTF-8 标记的字符串之外,没有直接的方法来删除 PACKAGE CMD CHECK 中的注释。

为此,我使用了命令:

nonUTF <- iconv(df$TroubleVector, from="UTF-8", to="ASCII")

在具有表情符号等的矢量上。如果该值具有 UTF-8 标记的字符串,则此命令返回 NA。我用它来对数据集进行子集化 - 现在我得到了一个干净的构建。

我 google 搜索 UTF-8 to ASCII online converter,粘贴到我的代码中,转换它,然后粘贴回我的脚本中。

由于这个答案被否决了,它引起了我对我 link 编辑为 non-performant 的原始站点的注意。所以我从答案中删除了那个特定的 link 。如果您偶然发现了一个坏的,请使用另一个,因为在 google.

的顶部结果中有很多可用的

stringi包中的stringi::stri_enc_toascii()解决了我开发包的问题

> stringi::stri_enc_isascii(a)
  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [18] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [35] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [52] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [69] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [86] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[103] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[120] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[137] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[154] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> b <- stringi::stri_enc_toascii(a)
There were 50 or more warnings (use warnings() to see the first 50)
> stringi::stri_enc_isascii(b)
  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [22] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [64] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[148] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE