1

我正在尝试运行一个 R 脚本,可以在这里使用 command 找到它plot_trace.R -m ./log.model.csv ./log.trace.csv

这两个 csv 文件可以在这里找到。

这会产生错误:

Error in `:=`(variable, as.character(variable)) : 
  Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
Calls: [ -> [.tbl_df -> check_names_df -> :=

最后但并非最不重要的是我的 sessionInfo() 输出:

R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.4

谢谢

4

2 回答 2

3

更新

我发现这个脚本有两个问题:

  • 作者混合tidyr了 class 的函数和变量data.table。这些函数可能会返回数据帧,并且data.table在这些函数上使用语法会导致错误。不幸的是,某些tidyr功能data.table在操作一个时可能会返回,但这似乎因tidyr包的版本而有很大差异。

  • unnest函数 from有一个新的tidyr接口。tidyr该脚本在1.0.0 或更高版本中无法正常工作。

以下是我使用 R 版本 3.6.1 和tidyr版本 1.0.0 更改以修复脚本的行:

  • 第 56 行:添加trace.df <- as.data.table(trace.df)
  • 第 64 行:更改为trace.df <- unnest(trace.df, cols)
  • 第 65 行:添加trace.df <- as.data.table(trace.df)

原始答案

我能够在您提供的数据上运行脚本而没有错误。两个都

Rscript --vanilla plot_trace.R -m ./log.model.csv ./log.trace.csv

chmod +x plot_trace.R
./plot_trace.R -m ./log.model.csv ./log.trace.csv

产生了以下情节:

结果图

您可以在 RStudio 中逐步运行脚本以检查trace.df每个步骤之后的类吗?

于 2019-10-21T12:08:28.803 回答
0

看起来unnest调用正在创建不是数据表的东西。

在第 56 行尝试添加:

trace.df <- as.data.table(trace.df)
于 2019-10-19T13:10:40.750 回答