【问题标题】:Using an R function to hash values produces a repeating value across rows使用 R 函数对值进行散列会产生跨行的重复值
【发布时间】:2021-07-15 20:06:13
【问题描述】:

我正在使用以下查询:

let
    Source = {1..5},
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), {"Numbers"}, null, ExtraValues.Error),
    #"Added Custom" = Table.AddColumn(#"Converted to Table", "Letters", each Character.FromNumber([Numbers] + 64)),
    #"Run R script" = R.Execute("# 'dataset' holds the input data for this script#(lf)#(lf)library(""digest"")#(lf)#(lf)dataset$SuffixedLetters <- paste(dataset$Letters, ""_suffix"")#(lf)dataset$HashedLetters <- digest(dataset$Letters, ""md5"", serialize = TRUE)#(lf)output<-dataset",[dataset=#"Added Custom"]),
    output = #"Run R script"{[Name="output"]}[Value]
in
    output

导致结果表:

这里是格式更好的 R 脚本:

# 'dataset' holds the input data for this script

library("digest")

dataset$SuffixedLetters <- paste(dataset$Letters, "_suffix")
dataset$HashedLetters <- digest(dataset$Letters, "md5", serialize = TRUE)
output<-dataset

“粘贴”函数似乎会遍历行并使用新输入解析每一行。但“摘要”函数似乎只返回表中所有行的第一个值。

我不知道为什么这两个函数的行为似乎不同。谁能建议如何使用每行中的值而不是仅使用初始值来解析“HashedLetters”列?

【问题讨论】:

    标签: r powerbi powerquery


    【解决方案1】:

    用途:

    dataset$HashedLetters <- sapply(dataset$Letters, digest, algo = "md5", serialize = TRUE)
    

    digest 一次作用于整个对象,而不是矢量的单个元素。

    vec <- letters[1:3]
    digest::digest(vec, algo="md5", serialize=TRUE)
    # [1] "38ce1fe9e19a222505e693e8bdd8aeec"
    sapply(vec, digest::digest, algo="md5", serialize=TRUE)
    #                                  a                                  b                                  c 
    # "127a2ec00989b9f7faf671ed470be7f8" "ddf100612805359cd81fdc5ce3b9fbba" "6e7a8c1c098e8817e3df3fd1b21149d1" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-25
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      相关资源
      最近更新 更多