如何在r中对数据帧进行base 64编码

Sah*_*hib 1 base64 r github-api

举个例子df <- head(iris)。我如何将其编码为 Base64 字符串。我需要它作为 GitHub API 内容参数。

目前我一直在尝试使用该base64encode()函数,但收到“normalizePath 中的错误”。

All*_*ron 5

您可以使用serialize获取对象的原始字节并将其转换为基数 64:

df <- head(iris)
b64_string <- base64enc::base64encode(serialize(df, NULL))

b64_string
#> [1] "WAoAAAADAAMGAgADBQAAAAAGQ1AxMjUyAAADEwAAAAUAAAAOAAAABkAUZmZmZmZ
#>      mQBOZmZmZmZpAEszMzMzMzUASZmZmZmZmQBQAAAAAAABAFZmZmZmZmgAAAA4AAAA
#>      GQAwAAAAAAABACAAAAAAAAEAJmZmZmZmaQAjMzMzMzM1ADMzMzMzMzUAPMzMzMzM
#>      zAAAADgAAAAY/9mZmZmZmZj/2ZmZmZmZmP/TMzMzMzM0/+AAAAAAAAD/2ZmZmZmZ
#>      mP/szMzMzMzMAAAAOAAAABj/JmZmZmZmaP8mZmZmZmZo/yZmZmZmZmj/JmZmZmZm
#>      aP8mZmZmZmZo/2ZmZmZmZmgAAAw0AAAAGAAAAAQAAAAEAAAABAAAAAQAAAAEAAAA
#>      BAAAEAgAAAAEABAAJAAAABmxldmVscwAAABAAAAADAAQACQAAAAZzZXRvc2EABAA
#>      JAAAACnZlcnNpY29sb3IABAAJAAAACXZpcmdpbmljYQAABAIAAAABAAQACQAAAAV
#>      jbGFzcwAAABAAAAABAAQACQAAAAZmYWN0b3IAAAD+AAAEAgAAAAEABAAJAAAABW5
#>      hbWVzAAAAEAAAAAUABAAJAAAADFNlcGFsLkxlbmd0aAAEAAkAAAALU2VwYWwuV2l
#>      kdGgABAAJAAAADFBldGFsLkxlbmd0aAAEAAkAAAALUGV0YWwuV2lkdGgABAAJAAA
#>      AB1NwZWNpZXMAAAQCAAAAAQAEAAkAAAAJcm93Lm5hbWVzAAAADQAAAAKAAAAAAAA
#>      ABgAABAIAAAL/AAAAEAAAAAEABAAJAAAACmRhdGEuZnJhbWUAAAD+"
Run Code Online (Sandbox Code Playgroud)

您可以在传输后撤消此操作:

unserialize(base64enc::base64decode(b64_string))
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1          5.1         3.5          1.4         0.2  setosa
#> 2          4.9         3.0          1.4         0.2  setosa
#> 3          4.7         3.2          1.3         0.2  setosa
#> 4          4.6         3.1          1.5         0.2  setosa
#> 5          5.0         3.6          1.4         0.2  setosa
#> 6          5.4         3.9          1.7         0.4  setosa
Run Code Online (Sandbox Code Playgroud)

但是,如果这是针对 github,则最好传输重现数据帧的代码而不是二进制信息。dput这可以通过以下方式实现:

ascii_string <- paste(capture.output(dput(df)), collapse = "\n")

ascii_string
#> [1] "structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4), \n    
#> Sepal.Width = c(3.5, 3, 3.2, 3.1, 3.6, 3.9), Petal.Length = c(1.4, \n    
#> 1.4, 1.3, 1.5, 1.4, 1.7), Petal.Width = c(0.2, 0.2, 0.2, \n    0.2, 0.2, 
#> 0.4), Species = structure(c(1L, 1L, 1L, 1L, 1L, \n    1L), .Label = 
#> c(\"setosa\", \"versicolor\", \"virginica\"), class = \"factor\")), 
#> row.names = c(NA, \n6L), class = \"data.frame\")"
Run Code Online (Sandbox Code Playgroud)

这可以写入 .R 文件作为再现数据帧的一种方式。它还可以用于以编程方式重建数据帧eval(parse(text = ascii_string))