亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

分配有:=FROM函數的data.table對象未打印

分配有:=FROM函數的data.table對象未打印

犯罪嫌疑人X 2019-07-13 15:39:08
我想修改data.table在一個功能范圍內。如果我使用:=函數中的特性,結果僅用于第二次調用。請看下面的插圖:library(data.table)mydt <- data.table(x = 1:3, y = 5:7)myfunction <- function(dt) {    dt[, z := y - x]    dt}當我只調用函數時,表就不會打印(這是標準行為)。但是,如果我保存返回的data.table在一個新的對象中,它不是在第一個調用時打印出來的,而是為第二個調用而打印的。myfunction(mydt)  # nothing is printed   result <- myfunction(mydt) result  # nothing is printedresult  # for the second time, the result is printedmydt                                                                     #    x y z# 1: 1 5 4# 2: 2 6 4# 3: 3 7 4 你能解釋一下為什么會發生這種情況嗎?如何防止?
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

我很抱歉,如果我不應該在這里發布一些東西,這不是一個答復,但我的帖子太長,不能發表評論。

我想指出的是,Janosdivenyi的解決方案是添加一個尾隨[]dt并不總是像下面這樣給出預期的結果(即使使用data.table 1.9.6或1.10.4)。

下面的例子表明,如果dt是函數中的最后一行,可以在沒有尾隨的情況下獲得所需的行為。[],但是如果dt不位于函數的最后一行,則為拖尾。[]才能得到想要的行為。

第一個例子顯示,沒有尾隨[]在……上面dt我們得到了預期的行為dt在函數的最后一行

mydt <- data.table(x = 1:3, y = 5:7)myfunction <- function(dt) {
  df <- 1
  dt[, z := y - x]}myfunction(mydt)  # Nothing printed as expectedmydt  # Content printed as desired##    
  x y z## 1: 1 5 4## 2: 2 6 4## 3: 3 7 4

添加拖尾[]在……上面dt出其不意

mydt <- data.table(x = 1:3, y = 5:7)myfunction <- function(dt) {
  df <- 1
  dt[, z := y - x][]}myfunction(mydt)  # Content printed unexpectedly##    x y z## 1: 1 5 4## 2: 2 6 4## 3: 
  3 7 4mydt  # Content printed as desired##    x y z## 1: 1 5 4## 2: 2 6 4## 3: 3 7 4

移動df <- 1在DT之后沒有尾隨[]出其不意

mydt <- data.table(x = 1:3, y = 5:7)myfunction <- function(dt) {
  dt[, z := y - x]
  df <- 1}myfunction(mydt)  # Nothing printed as expectedmydt  # Nothing printed unexpectedly

移動df <- 1在DT后面有一個尾隨[]給出預期的行為

mydt <- data.table(x = 1:3, y = 5:7)myfunction <- function(dt) {
  dt[, z := y - x][]
  df <- 1}myfunction(mydt)  # Nothing printed as expectedmydt  # Content printed as desired##    
  x y z## 1: 1 5 4## 2: 2 6 4## 3: 3 7 4


查看完整回答
反對 回復 2019-07-13
  • 2 回答
  • 0 關注
  • 425 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號