2015-12-14 11 views
7

は時々data.table印刷するには2回の試行を必要とするprint「印刷」に「データテーブル」を印刷する2回の試行が必要なのはなぜですか?

> 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 
> 

をそれほど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 
> 

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 
> 

ただし、print(Tbl)がスクリプトから省略されている場合コンソール上のファイル、printは再び2回の試行を必要とします:printは2つの試みを必要とする理由ANSとき

> 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 
> 

誰も教えてもらえますか?

> 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 

オペレーティングシステムがWindows NEWS(バージョン1.9.6 1.バグ修正)を引用7.

+6

あなたの質問に答えようとする人がコードを簡単に実行できるように、すべての+と>を削除してください。 –

+3

[おそらく関連](http://stackoverflow.com/questions/32988099/data-table-objects-not-printed-after-returned-from-function) – Cath

+0

なぜ 'print(Tbl)'に違いがあるのでしょうか?スクリプトファイルに含まれているかどうか – mra68

答えて

3

です:私はRのバージョン3.2.2を使用してい

if (TRUE) DT[,LHS:=RHS] #869と#1122が印刷されなくなりました。テストが追加されました。 は、私たちが1つのマイナス面と一緒に暮らすために持っていた仕事にこれを取得するには、次の:=は、関数、 の終わりDTまたはprint(DT)プロンプト、何で入力される次の時間の前にいないDT[]を持つ関数の内部で使用 ある場合 が印刷されます。繰り返してDTまたはprint(DT)が印刷されます。これを避けるには、 には、最後に:=の後にDT[]が含まれています。それが ではない場合(たとえば、変更できる機能ではない場合)、 のDT[]プロンプトが印刷されることが保証されます。

<-は関数です。もちろん、<-は一切使用しないでください。不要なコピーが作成されます(:=は、data.table列を変更します)ので、非効率的です。

関連する問題