有时print需要两次尝试打印data.table:
> library(data.table)
>
> rm(list=ls())
>
> Tbl <- fread( input = "Nr; Value
+ Nr 1;46.73
+ Nr 2;49.02
+ Nr 3;50.62
+ Nr 4;49.80
+ Nr 5;50.15",
+ sep = ";",
+ header = TRUE,
+ colClasses = c("character","numeric") )
> print(Tbl)
Nr Value
1: Nr 1 46.73
2: Nr 2 49.02
3: Nr 3 50.62
4: Nr 4 49.80
5: Nr 5 50.15
> Tbl <- Tbl[, Nr := as.numeric( gsub( "Nr ", "", Tbl$Nr ))]
> print(Tbl)
> print(Tbl)
Nr Value
1: 1 46.73
2: 2 49.02
3: 3 50.62
4: 4 49.80
5: 5 50.15
>
Run Code Online (Sandbox Code Playgroud)
不是这样的data.frame:
> rm(list=ls())
>
> DF <- read.table( text = "Nr; Value
+ Nr 1;46.73
+ Nr 2;49.02
+ Nr 3;50.62
+ Nr 4;49.80
+ Nr 5;50.15",
+ sep = ";",
+ header = TRUE,
+ colClasses = c("character","numeric"))
>
> DF$Nr <- as.numeric( gsub( "Nr ", "", DF$Nr ))
> print(DF)
Nr Value
1 1 46.73
2 2 49.02
3 3 50.62
4 4 49.80
5 5 50.15
>
Run Code Online (Sandbox Code Playgroud)
如果代码包含在脚本文件中,data.table则立即打印:
> source(path_to_Script_1,echo=TRUE,prompt.echo="(script) ",max.deparse.length=500)
(script) library(data.table)
(script) rm(list=ls())
(script) Tbl <- fread( input = "Nr; Value
+ Nr 1;46.73
+ Nr 2;49.02
+ Nr 3;50.62
+ Nr 4;49.80
+ Nr 5;50.15",
+ sep = ";",
+ header = TRUE,
+ colClasses = c("character","numeric") )
(script) Tbl <- Tbl[, Nr := as.numeric( gsub( "Nr ", "", Tbl$Nr ))]
(script) print(Tbl)
Nr Value
1: 1 46.73
2: 2 49.02
3: 3 50.62
4: 4 49.80
5: 5 50.15
>
Run Code Online (Sandbox Code Playgroud)
但是如果print(Tbl)从脚本文件中省略,则print在控制台上再次需要两次尝试:
> source(path_to_Script_2,echo=TRUE,prompt.echo="(script) ",max.deparse.length=500)
(script) library(data.table)
(script) rm(list=ls())
(script) Tbl <- fread( input = "Nr; Value
+ Nr 1;46.73
+ Nr 2;49.02
+ Nr 3;50.62
+ Nr 4;49.80
+ Nr 5;50.15",
+ sep = ";",
+ header = TRUE,
+ colClasses = c("character","numeric") )
(script) Tbl <- Tbl[, Nr := as.numeric( gsub( "Nr ", "", Tbl$Nr ))]
> print(Tbl)
> print(Tbl)
Nr Value
1: 1 46.73
2: 2 49.02
3: 3 50.62
4: 4 49.80
5: 5 50.15
>
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我什么时候为什么print需要两次尝试?我正在使用R版本3.2.2:
> R.version
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 2.2
year 2015
month 08
day 14
svn rev 69053
language R
version.string R version 3.2.2 (2015-08-14)
nickname Fire Safety
Run Code Online (Sandbox Code Playgroud)
操作系统是Windows 7.
引用新闻(1. 1.9.6版本中的bug修复):
if (TRUE) DT[,LHS:=RHS]不再打印#869 和#1122。添加了测试。为了让它发挥作用,我们不得不忍受一个缺点:如果在:=函数内部使用 a 且DT[]函数末尾之前没有 no ,那么下次在提示符下键入DTor时,将不会打印任何内容。print(DT)重复DT或print(DT)将打印。为了避免这种情况:在函数的DT[]最后一个后面添加一个。:=如果这是不可能的(例如,它不是您可以更改的功能),则DT[]保证在提示时打印。
<-是一个函数。当然,您<-根本不应该使用那里。它创建了不必要的副本(因为:=修改了 data.table 列),因此效率低下。