我想data.table在一个函数内修改一个.如果我:=在函数中使用该功能,则仅为第二次调用打印结果.
请看下图:
library(data.table)
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x]
dt
}
Run Code Online (Sandbox Code Playgroud)
当我只调用该函数时,表格不会被打印(这是标准行为.但是,如果我将返回的内容保存data.table到新对象中,则不会在第一次调用时打印,仅针对第二次调用.
myfunction(mydt) # nothing is printed
result <- myfunction(mydt)
result # nothing is printed
result # for the second time, the result is printed
mydt
# x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么会发生这种情况以及如何预防吗?
这里真的很奇怪.在下面的代码中,我创建了一个名为的变量temp.我必须先打电话两次才能看到它是什么.例如,我第一次调用它时,控制台什么也没显示.第二次显示data.table/ data.frame它是.谁能帮我理解这里发生了什么?
library(magrittr)
library(data.table)
myDT <- as.data.table(mtcars)
temp <-
myDT %>%
melt(id.vars = c('cyl', 'mpg', 'hp'),
measure.vars = c('vs','am','gear','carb'),
variable.name = 'Data') %>%
extract( value > 0) %>%
extract( , value := NULL)
Run Code Online (Sandbox Code Playgroud)
我的控制台在做什么(第一次调用没有做任何事情):
> temp
> temp
cyl mpg hp Data
1: 4 22.8 93 vs
2: 6 21.4 110 vs
3: 6 18.1 105 vs
4: 4 24.4 62 vs
5: 4 22.8 95 vs
...
...
Run Code Online (Sandbox Code Playgroud)