When and Why Does "Print" Need Two Attempts to Print a "Data.Table"

data.table objects assigned with := from within function not printed

As David Arenburg mentions in a comment, the answer can be found here. There was a bug fixed in the version 1.9.6 but the fix introduced this downside.

One should call DT[] at the end of the function to prevent this behaviour.

myfunction <- function(dt) {
dt[, z := y - x][]
}
myfunction(mydt) # prints immediately
# x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4

This is described in data.table FAQ 2.23:

Why do I have to type DT sometimes twice after using := to print the result to console?

This is an unfortunate downside to get #869 to work. If a := is used inside a function with no DT[] before the end of the function, then the next time DT is typed at the prompt, nothing will be printed. A repeated DT will print. To avoid this: include a DT[] after the last := in your function. If that is not possible (e.g., it's not a function you can change) then print(DT) and DT[] at the prompt are guaranteed to print. As before, adding an extra [] on the end of := query is a recommended idiom to update and then print; e.g.> DT[,foo:=3L][].

print an entire table in C#

You already have the dataTable instance available. dataTable.Columns[i] should give you the appropriate DataColumn.

Print out everything from table 1 and matching data from table 2

I am trying to print out everything from parent and record from child(if matching..)

You are describing a left join:

select p.*, c.data2
from parent p
left join child c on c.pid = p.id


Related Topics



Leave a reply



Submit