首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用`:=`的data.table中的赋值具有不一致的行为

在data.table中,使用:=进行赋值操作时,具有一些特殊的行为。下面是对这个问题的完善且全面的答案:

在data.table中,使用:=进行赋值操作是一种快速和高效的方式,用于在数据表中创建、修改和更新列。然而,它的行为在不同的情况下可能会有所不同,特别是在使用条件进行赋值时。

具体来说,:=的赋值行为有以下几个方面:

  1. 创建新列:如果使用:=为一个不存在的列赋值,data.table会自动创建该列,并将赋值结果填充到相应的行中。这种行为使得在data.table中添加新列变得非常方便。
  2. 修改现有列:如果使用:=为已存在的列赋值,data.table会直接修改该列的值,而不会创建新的副本。这种行为使得在data.table中修改列变得非常高效。
  3. 使用条件进行赋值:当使用条件进行赋值时,:=的行为可能会有所不同。具体来说,如果条件的结果是一个标量(单个值),则将该标量值赋给满足条件的所有行。如果条件的结果是一个向量(多个值),则将该向量值逐行赋给满足条件的行。这种行为使得在data.table中根据条件进行赋值变得非常灵活。

需要注意的是,使用:=进行赋值时,data.table会直接在原始数据表上进行操作,而不会创建副本。这意味着在进行赋值操作后,原始数据表的内容会被修改。如果需要保留原始数据表,可以使用copy()函数创建一个副本进行操作。

对于这个问题,如果你想要了解更多关于data.table中:=赋值的具体用法和示例,可以参考腾讯云的数据分析产品Data Lake Analytics(DLA)的文档,链接地址为:https://cloud.tencent.com/document/product/878/18768

总结起来,使用:=的data.table中的赋值具有快速、高效、灵活的特点,可以用于创建新列、修改现有列和根据条件进行赋值。这种赋值行为使得在data.table中进行数据处理和操作变得非常方便。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关注对象自我赋值行为

秘籍酷 · 微店 IT编程入门指导 所谓自我赋值,指得就是一个对象赋值给自己简单行为,但这种看起来人畜无害动作,在某些情形下却可能会使得你代码崩溃。 ?...自我赋值语句,就像这样: Widget w; w = w; 很明显,这是一段愚蠢代码。...如果你很在乎这个事情,你可以将 自我检测 代码重新加到代码,可是这又将增加程序尺寸,引入了一个新结构分支,prefetching、caching 和 pipelining 指令效率都会被拖累。...因此你需要权衡这二者利弊。 ? 总结: 编写 operator=() 函数时要格外注意操作数是否是同一对象。...需要格外注意会发生异常(尤其是堆内存申请代码)代码处,是否会导致程序逻辑不一致性。 保证任何函数在同时操作多个对象时,哪怕有多个对象是同一对象情况下也能正常执行。

65620

MySQL变量定义和变量赋值使用

说明:现在市面上定义变量教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin…end块,而普通变量定义和使用都说比较少,针对此类问题只能在官方文档才能找到讲解。...前言 MySQL存储过程,定义变量有两种方式: 1、使用set或select直接赋值,变量名以@开头 例如: set @var=1; 可以在一个会话任何地方声明,作用域是整个会话,称为用户变量...注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值” 用户变量与数据库连接有关,在连接声明变量,在存储过程创建了用户变量后一直到数据库实例接断开时候...在此连接声明变量无法在另一连接中使用。 用户变量变量名形式为@varname形式。 名字必须以@开头。 声明变量时候需要使用set语句,比如下面的语句声明了一个名为@a变量。...这些默认值可以在选项文件或在命令行中指定选项进行更改。要想更改全局变量,必须具有super权限。全局变量作用于server整个生命周期,但是不能跨重启。即重启后所有设置全局变量均失效。

8.2K41

Spring 属性赋值

一、配置文件配置 如果使用配置文件的话,可以直接使用 value 属性指定值。 <!...: 字符串; SpEL 表达式 #{}; 配置文件值 ${}; 如果使用配置文件值,需要指定配置文件位置,使用 context:property-placeholder 标签。...二、@Value 注解 使用 @Value 注解同样可以实现相同效果: /* * 使用 @Value 赋值 * 1.基本数值 * 2.可以使用 SpEL #{} * 3.可以使用 ${}...: 取出配置文件值(在运行环境变量) * */ @Value("张四") private String name; @Value("#{20-2}") private Integer age;...@Value("${person.nickName}") private String neckName; 但是也需要指定配置文件位置,在配置类中使用 @PropertySource 注解指定: @Configuration

1.8K10

搞懂JavaScript连续赋值

搞懂JavaScript连续赋值 前段时间老是被一道题刷屏,一个关于连续赋值坑。 遂留下一个笔记,以后再碰到有人问这个题,直接丢过去链接。。...再来说上边那道题,我一次看到这个题时候,答案也是错了,后来翻阅资料,结合着调试,也算是整明白了-.- 前两行声明变量并赋值,使得a和b都指向了同一个地址({ n: 1 }在内存位置) 为了理解连续赋值运行原理...我们从代码第一行开始,画图,一个图一个图来说: let a = { n: 1 }声明了一个变量a,并且创建了一个Object:{ n: 1 },并将该Object在内存地址赋值到变量a,这时就能通过...执行表达式(a.x = a = { n: 2 }),取出a.x位置,由于a值为{ n: 1 },所以取属性x为undefined,遂在内存开辟一块新空间作为({ n: 1}).x位置: ?...执行剩余表达式(a = { n: 2 }),取出a位置,因为a是一个已声明变量,所以该步骤并不会有什么改变; 执行剩余表达式({ n: 2 }),为{ n: 2 }在内存开辟一块空间存放数据:

3.9K71

搞懂JavaScript连续赋值

搞懂JavaScript连续赋值 前段时间老是被一道题刷屏,一个关于连续赋值坑。 遂留下一个笔记,以后再碰到有人问这个题,直接丢过去链接。。...再来说上边那道题,我一次看到这个题时候,答案也是错了,后来翻阅资料,结合着调试,也算是整明白了-.- 前两行声明变量并赋值,使得a和b都指向了同一个地址({ n: 1 }在内存位置) 为了理解连续赋值运行原理...我们从代码第一行开始,画图,一个图一个图来说: let a = { n: 1 }声明了一个变量a,并且创建了一个Object:{ n: 1 },并将该Object在内存地址赋值到变量a,这时就能通过...执行表达式(a.x = a = { n: 2 }),取出a.x位置,由于a值为{ n: 1 },所以取属性x为undefined,遂在内存开辟一块新空间作为({ n: 1}).x位置: ?...执行剩余表达式(a = { n: 2 }),取出a位置,因为a是一个已声明变量,所以该步骤并不会有什么改变; 执行剩余表达式({ n: 2 }),为{ n: 2 }在内存开辟一块空间存放数据:

71710

JVM线程行为

JVM做了它想做事情,那么如何预测线程执行顺序呢? 线程化是指同时执行程序过程以提高应用程序性能实践。虽然直接在业务应用程序中使用线程并不常见,但它们一直在Java框架中使用。...你可以在按照示例操作时运行自己测试。 找到你第一个线程:Javamain()方法 即使你从未直接使用Java线程,你也间接使用它们,因为Javamain()方法包含一个主线程。...当我们使用new inheritingThread()调用方法start()时,将run()执行方法逻辑。...了解线程行为 在上面的代码,我们创建了三个线程。第一个线程是Harley Davidson,我们为此线程分配了默认优先级。Dodge Tomahawk分配了第二个线程MAX_PRIORITY。...· 可以直接扩展Thread类以使用线程。 · 可以在Runnable接口内实现线程动作。 · 线程优先级取决于JVM实现。 · 线程行为将始终取决于JVM实现。

1K40

js 逻辑赋值运算

逻辑运算符 在 js ,我们都知道有逻辑运算符,比如 逻辑与 ( && )、逻辑或( || )、逻辑非( ! )、空值合并运算符(??)...它通常与布尔(逻辑)值一起使用。当它是布尔值时,返回一个布尔值。然而,|| 运算符实际上是返回一个指定操作数值,所以如果这个运算符被用于非布尔值,它将返回一个非布尔值。...也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外行为。比如为假值(例如,'' 或 0)时。...逻辑赋值 就是在逻辑运算符情况下+赋值比如  a&&=2,就是  a=a&&2 逻辑空赋值(??=) 逻辑空赋值运算符(x ??...25 逻辑与赋值(&&=) 逻辑与赋值(x &&= y)运算仅在 x 为真值时为其赋值

18720

Javascript 解构赋值语法

首先在 ES6引入“解构赋值语法”允许把数组和对象值插入到不同变量。虽然看上去可能很难,但实际上很容易学习和使用。 数组解构 数组解构非常简单。...你所要做就是为数组每个值声明一个变量。你可以定义更少变量,而不是数组索引(即,如果你只想解处理前几个值),请跳过某些索引或甚至使用 REST 模式将所有剩余值放到新数组。...1 ...g // g = { c: 2 } }, ...h // h = { d: [1, 2]} } = nested; 高级解构 由于数组行为与对象相似...,所以可以通过使用索引作为对象解构分配 key,用解构分配语法从数组获取特定值。...用这种方法还可以得到数组其他属性(例如数组 length)。最后,如果解构后值是 undefined,则还可以为解构过程变量定义默认值。

1.1K30

关于data.tablei, j, by都为数字理解

写 在前面 本期还是由村长来为大家供稿,这期讲一个村长遇到关于data.table比较有趣问题,希望大家支持!! 问 题:i, j, by同时输入数字会怎样?...首先,我们单独看i只有一个1情况下是什么运行结果,为了让运行出来代码被认定是data.table格式,我们在j中加入.SD(不清楚.SD用途小伙伴可以查看data.tablemanual,或者查看笔者上一篇推送用...可见,在DTi输入一个数字和用一般提取符号`[`只输入一个数字结果完全一样,就是提取这个数据集中某一行。...最后,我们将j1添加进去,代码与结果如下: mtcars[1, 1, 1] ?...结 果分析 从这样一段拆解当中,我们大致就可以明白为什么会出现这样结果了,整体运行思路就是:首先选出了第一行,而后在by以一个变量名默认为NA变量为基准,最后在j中生成了一个默认变量名为V1变量

1.2K30

Spring事务传播行为

由于在我们日常开发时,通常会在一个Service接口中调用其它Service接口以此来完成一个完整事务操作,这时就会发生服务接口嵌套调用情况,spring通过事务传播行为控制当前事务如何传播到被嵌套调用目标服务接口方法...下面我们想想了解一下在spring中都有哪些不同事务传播行为,以前它们区别。...spring在TransactionDefinition接口中定义了7种类型事务传播行为,它们具体区别如下: 事务传播行为说明 PROPAGATION_REQUIRED:如果当前没有事务,那就新建一个新事务...如果DAO接口是基于spring提供模板类创建,由于模板类已经在内部使用了资源获取工具类获取数据库连接,所以用户就不必关心底层数据连接获取问题了。...方式spring官网已经不推荐使用了,所以,我们下面的测试用例将采用用tx方式来管理事务。

1.2K40

ES6变量解构赋值, 解放我们双手,实现变量批量赋值

, 先来看一下我们平时取出对象值,并赋值给一个变量是如何操作吧: let obj = {name: 'jack', age: 18, gender: '男'} let name = obj.name...: '男'} 就只需要一行代码就可以将对象三个值都取出来并赋值给三个变量。...但是,我们在使用对象解构赋值时候必须要注意,等号左边顺序是随意, 系统会根据你变量名, 优先去对象寻找与你对象名相同键, 将它赋值给这个变量。...这么一说, 我们变量名就必须要跟对象健名一样了吗?...,然后放到一个数组赋值给等号左边变量 结束语 好了, 关于变量解构赋值知识就将这么多,其实还有一些相关知识,例如数值和布尔值解构赋值、函数参数解构赋值等, 但我觉得都不常用,所以就没给大家细讲

1.2K10

ES6解构赋值

ES6解构:es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称之为解构。 解构赋值是对赋值运算符扩展。 他是一种针对数组或者对象进行模式匹配,然后对其中变量进行赋值。...在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象数据字段获取。 解构模型 在解构,有下面两部分参与: 1.解构源,解构赋值表达式右边部分。...//bbb //变量名与属性名不一致情况下,必须这样写 let {a : name, b : age} = {a : 'zhangsan', b : 33}; console.log(name)...函数参数也可以使用解构参数 function move({x = 0,y = 0} = { }){ return [x,y]; } console.log(move({x : 3,y :...y : 'c' }); console.log(f({x : 'a', z : 'b', y : 'c' })); //acb 1 4.提取 JSON 数据 解构赋值对提取 JSON 对象数据,

81330

data.table使用应该注意一些细节

freadnThread 参数使用   注意默认nThread=getDTthreads(),即使用所有能用核心,但并不是核心用越多越好,本人亲自测试情况下,其实单核具有较强性能,只有在数据大于...3Gb情况下,开启10核(我机器全部核心30多核)效率才比一个核心更高,而默认使用全部核心效率一直非常低。...因此对于不是非常巨大文件,建议设置为1,不要使用全部核心 freadsep是自动检测   所以在循环读入文件过程,就算不同文件分隔符不同,也可以循环一次性方便读入; 还有就算后续改变了文件分隔符...as.data.table函数同样有一个rownames参数,设置为T可以将行名保留下来作为data.table一列 不建议set和for循环一起使用   虽然set可以在内存上直接改变数值,但在R...  类似于集合运算,data.tablefintersect, fsetdiff, funion,fsetequal函数能对不同数据框行求交集,差集,并集等 可以直接对列按分隔符进行分割   应用

1.5K10

渗透测试服务具有哪些

社会工程学渗透测试是利用社会工程学进行渗透测试,通常利用人们行为弱点来达到渗透目的。...典型社会工程学渗透测试工具有BeefXSS和HoneyPots,这些工具诱使用户访问特定网站,获得用户Cookie信息,达到渗透目的。 (3)网站渗透测试工具。...网站渗透测试是对WEB应用程序和相应设备配置进行渗透测试。在进行网站渗透测试时,安全工程师必须采取非破坏性方法来发现目标系统潜在漏洞。...常用网络渗透测试工具有asp-auditor、darkmysql、fimap、xsser等。这些工具是针对网络服务器不同功能硬件和软件进行渗透测试更专业渗透测试工具。...Metasploit框架使用模块,包括针对不同平台和不同类型漏洞渗透测试,极大地简化了渗透测试难度,在做渗透测试服务时候一定要向网站安全公司或渗透测试公司去做,因为他们实战经验比较丰富,能少走很多弯路

1K20

python基础(9)增强型赋值使用普通赋值区别

前言 增强型赋值语句是经常被使用,因为从各种学习渠道,我们能够得知i += 1效率往往要比 i = i + 1 更高一些(这里以 += 为例,实际上增强型赋值语句不仅限于此)。...所以我们会乐此不疲在任何能够替换普通赋值语句地方使用增量型赋值语句,以此来优化代码。那么我们是否有想过,在什么情况下 i += 1 其实并不等效于 i = i + 1 !!...,此时a和bid和value均不同 这是一个值得注意坑,警惕我们在使用增量赋值运算符来操作可变对象(如:列表)时可能会产生不可预测结果。...同时在前文中也提到,增强赋值语句比普通赋值语句效率更高,这是因为在 Python 源码, 增强赋值比普通赋值多实现了“写回”功能,也就是说增强赋值在条件符合情况下(例如:操作数是一个可变类型对象...提示:尽量不要使用增量赋值运算符来处理任何可变类型对象,除非你对上述问题有了足够了解。

54020
领券