gpt4 book ai didi

r - 在函数中修改后,第一次调用时不显示 data.table

转载 作者:行者123 更新时间:2023-12-01 08:53:47 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





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

(2 个回答)


6年前关闭。




在我的函数中,我修改了作为参数给出的 data.table 的列。我注意到,如果我在调用函数后立即尝试显示这个 data.table (我的意思是,只是通过它的名字),什么也不会发生,只有后续调用会显示该表:

DT <- data.table(colA=1:4, colB=4:1) # sample table
modcol <- function(dtIn){
dtIn[, colA:=NULL];
return(TRUE);
}

DT # display table before any changes:
# colA colB
#1: 1 4
#2: 2 3
#3: 3 2
#4: 4 1

modcol(DT) # run our function
#[1] TRUE

DT # silent!
DT # only second call display modified table
# colB
#1: 4
#2: 3
#3: 2
#4: 1

它仅在我的函数返回一个值时发生(没关系,由 return()invisible() )并且仅当修改了表内容时(例如,如果我更改列名而不是删除列 - 这种效果不会发生)。这种行为并没有真正给我带来任何问题,但我仍然很好奇它为什么会发生。

最佳答案

如果您使用的是 v1.9.6,请参阅相应的自述文件(错误修正部分,第一个条目,https://github.com/Rdatatable/data.table):

if (TRUE) DT[,LHS:=RHS] no longer prints, #869 and #1122. Tests added. To get this to work we've had to live with one downside: if a := is used inside a function with no DT[] before the end of the function, then the next time DT or print(DT) is typed at the prompt, nothing will be printed. A repeated DT or print(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 DT[] at the prompt is guaranteed to print. As before, adding an extra [] on the end of a := query is a recommended idiom to update and then print; e.g. > DT[,foo:=3L][]. Thanks to Jureiss and Jan Gorecki for reporting.



因此:是否调用 DT[]在你的函数调用帮助之后?

关于r - 在函数中修改后,第一次调用时不显示 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33195362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com