R - `:=`(变量,as.character(变量))中的错误
R - Error in `:=`(variable, as.character(variable))
我正在尝试 运行 一个 R 脚本,可以使用命令 here 找到它
plot_trace.R -m ./log.model.csv ./log.trace.csv
.
可以找到两个csv文件here。
这会产生错误:
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
谢谢
看起来 unnest
调用正在创建一些非数据 table 的东西。
在第 56 行尝试添加:
trace.df <- as.data.table(trace.df)
更新
我发现这个脚本有两个问题:
作者混合了 tidyr
的函数和 class data.table
的变量。这些函数可能会 return 数据帧,并且在这些函数上使用 data.table
语法会导致错误。不幸的是,某些 tidyr
函数在一个函数上运行时可能 return data.table
,但这似乎因 tidyr
包的版本而有很大差异。
tidyr
中的 unnest
函数有一个新界面。该脚本无法像 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
的 class 吗?
我正在尝试 运行 一个 R 脚本,可以使用命令 here 找到它
plot_trace.R -m ./log.model.csv ./log.trace.csv
.
可以找到两个csv文件here。
这会产生错误:
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
谢谢
看起来 unnest
调用正在创建一些非数据 table 的东西。
在第 56 行尝试添加:
trace.df <- as.data.table(trace.df)
更新
我发现这个脚本有两个问题:
作者混合了
tidyr
的函数和 classdata.table
的变量。这些函数可能会 return 数据帧,并且在这些函数上使用data.table
语法会导致错误。不幸的是,某些tidyr
函数在一个函数上运行时可能 returndata.table
,但这似乎因tidyr
包的版本而有很大差异。tidyr
中的unnest
函数有一个新界面。该脚本无法像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
的 class 吗?