相关疑难解决方法(0)

data.table对象分配有:=来自未打印的函数内

我想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)

你能解释一下为什么会发生这种情况以及如何预防吗?

r function assignment-operator data.table

37
推荐指数
1
解决办法
2189
查看次数

在评估之前必须调用两次变量?

这里真的很奇怪.在下面的代码中,我创建了一个名为的变量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)

r magrittr data.table

6
推荐指数
1
解决办法
137
查看次数

标签 统计

data.table ×2

r ×2

assignment-operator ×1

function ×1

magrittr ×1