我怎样才能避免这个功能修改我的初始对象的类 [英] how can I avoid this function modifies the class of my initial object

查看:104
本文介绍了我怎样才能避免这个功能修改我的初始对象的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如标题所示,

 #install.packages(c(dplyr),dependencies = TRUE)
library(dplyr)
tbl< - tibble(id = rep(0:1,c(7,10)),
grp = rep(c(0,1,0,1, 2),c(3,4,2,5,3)),
LET = rep(c('A','B','A','B','A','B' ),c(1,4,3,3,4,2)))

#install.packages(c(data.table),dependencies = TRUE)
library( data.table)
class(tbl)
#> [1]tbl_dftbldata.frame
dt_by_akrun< - function(x){foo< -x; setDT(foo)[,grp_LET:= LET [1],。(id,grp)]; as_tibble(foo)}
不可见(dt_by_akrun(tbl))
class(tbl)
#> [1]data.tabledata.frame


解决方案

<而不是分配 foo< -x ,我们可以将它分配给 copy(x)

  dt_by_akrun < -  function(x){foo < -  copy(x)
setDT(foo)[,grp_LET:= LET [1],。(id,grp)]
as_tibble(foo)
}
不可见(dt_by_akrun(tbl))
class(tbl)
#[ 1]tbl_dftbldata.frame


As the title says,

# install.packages(c("dplyr"), dependencies = TRUE)
library(dplyr)
tbl <- tibble(id = rep(0:1, c(7, 10)),
             grp = rep(c(0,1,0,1,2), c(3,4,2,5,3)),
             LET = rep(c('A', 'B', 'A', 'B', 'A', 'B'), c(1,4, 3, 3, 4, 2)))

# install.packages(c("data.table"), dependencies = TRUE)
library(data.table) 
class(tbl)
#> [1] "tbl_df"     "tbl"        "data.frame"
dt_by_akrun  <- function(x) {foo <- x; setDT(foo)[, grp_LET := LET[1], .(id, grp)]; as_tibble(foo)}
invisible(dt_by_akrun(tbl))
class(tbl)
#> [1] "data.table" "data.frame"

解决方案

Instead of assigning foo <-x, we can assign it to copy(x)

dt_by_akrun  <- function(x) {foo <- copy(x)
                  setDT(foo)[, grp_LET := LET[1], .(id, grp)]
                   as_tibble(foo)
               }
invisible(dt_by_akrun(tbl))
class(tbl)
#[1] "tbl_df"     "tbl"        "data.frame"

这篇关于我怎样才能避免这个功能修改我的初始对象的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆