R 在求值之前必须调用变量两次吗?
这里发生了一些非常奇怪的事情。在下面的代码中,我创建了一个名为R 在求值之前必须调用变量两次吗?,r,data.table,magrittr,R,Data.table,Magrittr,这里发生了一些非常奇怪的事情。在下面的代码中,我创建了一个名为temp的变量。我得打两次电话才能知道是什么。我第一次调用它时,控制台没有显示任何内容。第二次,它显示它所在的数据.table/数据.frame。有人能帮我理解这里发生了什么吗 library(magrittr) library(data.table) myDT <- as.data.table(mtcars) temp <- myDT %>% melt(id.vars = c('cyl',
temp
的变量。我得打两次电话才能知道是什么。我第一次调用它时,控制台没有显示任何内容。第二次,它显示它所在的数据.table
/数据.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)
这就是为消除更大的bug而实施的修复的已知副作用。它作为v1.9.6版本“BUG FIXES”部分的第一项被记录在案。引用该链接: 如果(TRUE)DT[,LHS:=RHS]不再打印,#869和#1122。增加了测试。为了实现这一点,我们不得不面对一个缺点:如果在函数结束之前没有DT[]的函数中使用a:=,那么下次在提示符处键入DT或print(DT)时,将不会打印任何内容。将打印重复的DT或打印(DT)。为了避免这种情况:在函数的最后一个:=后面包含一个DT[]。如果这是不可能的(例如,它不是一个可以更改的函数),则提示处的DT[]保证打印。和以前一样,建议在:=查询的末尾添加一个额外的[]来更新然后打印;e、 g.>DT[,foo:=3L][]。感谢Jureis和Jan Gorecki的报道 正如这里所解释的,解决方案是在函数中包含操作的最后一个
:=
后面附加一个[]
。在这里,这意味着要做以下工作:
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) %>% `[`
## Following which, this will print the first time
temp
库(magrittr)
库(数据表)
多年电价%
提取(值>0)%>%
提取(,值:=NULL)%>%`[`
##之后,这将第一次打印
临时雇员
我在RStudio和Rterm(R版本3.2.2(2015-08-14);平台:x86_64-w64-mingw32/x64(64位);data.table_1.9.6)中也看到了这一点。print.data.frame(temp)
首先工作。我总是在或set()之后注意到这一点
调用data.table
我肯定我以前见过data.table出现这种已知行为。在某个地方有一个重复的,可能其中一个data.table专家会知道它在哪里。搜索?或
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) %>% `[`
## Following which, this will print the first time
temp