首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在data.table中组合多个变量名列表?

在data.table中组合多个变量名列表?
EN

Stack Overflow用户
提问于 2015-05-05 11:51:33
回答 2查看 1.1K关注 0票数 10

我试图将两个独立的变量名列表传递到一个data.table (v1.9.4)中。它返回正确的列,但它删除变量名。这项工作如预期的那样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dt <- data.table(a=1:3, b=4:6, c=7:9, d=10:12)
dt
   a b c  d
1: 1 4 7 10
2: 2 5 8 11
3: 3 6 9 12

传递一个名称列表也很好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dt[,list(a,b)]
   a b
1: 1 4
2: 2 5
3: 3 6

但是,当我需要传递多个列表时,它返回正确的列,但去掉变量名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dt[,c(list(a,b), list(c,d))]
   V1 V2 V3 V4
1:  1  4  7 10
2:  2  5  8 11
3:  3  6  9 12

为什么有两份名单?我使用了多引号()d变量列表。我读过FAQ问题1.6,我知道解决方法之一是使用with=FALSE使用字符向量。但我的实际用例是将名称和表达式的混合传递给函数,例如,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
varnames <- quote(list(a,b))
expr <- quote(list(a*b, c+d))
function(dt, varnames, expr) {
  dt[,c(varnames, expr)]
}

我希望“varname”列有它们正确的名称(如果您只传递一个列表,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dt[,list(a,b,a*b,c+d)]
   a b V3 V4
1: 1 4  4 17
2: 2 5 10 19
3: 3 6 18 21

如何在data.table中组合多个列表,使其仍然返回正确的列名?(我不完全确定这是一个data.table问题,还是我只是在做一些愚蠢的事情,就像我试图在R中组合列表一样,但是c()似乎做了我想做的事情。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-05 13:20:18

另一种选择是提前构建完整的调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
varnames[4:5] <- expr[2:3]  # this results in `list(a, b, a * b, c + d)`
dt[, eval(varnames)]

生产:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   a b V3 V4
1: 1 4  4 17
2: 2 5 10 19
3: 3 6 18 21

更笼统地说,假设您有一个引用的表达式列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exprlist <- list(quote(list(a, b)), quote(list(c, c %% a)), quote(list(a + b)))
expr <-  as.call(Reduce(function(x, y) c(as.list(x), as.list(y)[-1]), exprlist))  # @eddi
dt[, eval(expr)]
票数 4
EN

Stack Overflow用户

发布于 2015-05-05 12:18:26

下面是使用.SD的一个可能的解决办法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
varnames <- quote(list(a,b))
expr <- quote(list(a*b, c+d))

myFunc <- function(dt, varnames, expr) {
  dt[, c(.SD[, eval(varnames)], eval(expr))]
}

myFunc(dt, varnames, expr)

#    a b V1 V2
# 1: 1 4  4 17
# 2: 2 5 10 19
# 3: 3 6 18 21
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30062012

复制
相关文章
如何使用ReconAIzer将OpenAI添加到Burp中
ReconAIzer是一款功能强大的Burp Suite扩展,该工具基于Jython开发,可以为Burp Stuite添加OpenAI能力,并利用OpenAI来优化和增强渗透测试过程中的网络侦查任务。该工具专为漏洞猎人和渗透测试人员设计,支持以自动化的形式执行多种网络安全任务,可以帮助广大安全研究人员以简单快速的形式识别和利用漏洞。
FB客服
2023/08/08
2990
如何使用ReconAIzer将OpenAI添加到Burp中
将下载到本地的JAR包手动添加到Maven仓库(转)
常用Maven仓库网址: http://mvnrepository.com/ http://search.maven.org/ http://repository.sonatype.org/content/groups/public/ http://people.apache.org/repo/m2-snapshot-repository/ http://people.apache.org/repo/m2-incubating-repository/
HUC思梦
2020/09/03
1.9K0
将下载到本地的JAR包手动添加到Maven仓库(转)
将Sublime添加到鼠标右键
2、找到 HKEY_CLASSES_ROOT/*/shell 目录,在此目录下操作。
新码农
2020/03/05
3K0
IntelliJ IDEA 中的版本控制介绍(中)
由于 IntelliJ IDEA 支持的版本控制工具非常的多,但咱们真正能够用到的也就两三个而已,因此在本篇博文中,咱们主要介绍 SVN、Git 和 GitHub 的配置方法。 SVN 如果想要在 I
CG国斌
2018/01/26
1K0
Winform 后台将指定的控件集合添加到制定容器中
1 /// <summary> 2 /// 把按钮按照行数分割排列 3 /// </summary> 4 /// <param name="ControlArry">按钮集合</param> 5 /// <param name="control_parent">父容器</param> 6 /// <param name="RowCount">每一行数量</param> 7 ///
FreeTimeWorker
2020/08/31
2.3K0
[Go]Golang中控制并发的sync包
Mutex:互斥锁 RWMutex:读写锁 WaitGroup:等待组 Once:单次执行 Cond:信号量 Pool:临时对象池 Map:自带锁的map
唯一Chat
2021/03/11
5650
【GIT版本控制】--什么是版本控制
版本控制是在软件开发和许多其他领域中非常重要的工具,因为它解决了许多与协作、追踪更改和管理项目相关的问题。以下是一些主要原因,解释了为什么需要版本控制:
喵叔
2023/10/06
3140
将Windows Terminal添加到鼠标右键
导读 非常实用的小技巧。 下载Windows Terminal图标,右键另存为。 [WindowsTerminal图标] 保存至'C:\Users\Administrator\AppData\Local\Terminal\Terminal.ico'。 win+R输入'regedit',打开注册表。 找到'HKEY_CLASSES_ROOT\Directory\Background\shell'目录,在此目录下操作。 新建项'wt',双击右边'默认',更改右键文字显示内容'Windows Terminal H
新码农
2020/08/05
3.6K0
将Windows Terminal添加到鼠标右键
版本控制
每次发布 Web 服务时,都会为该 Web 服务分配一个版本。版本控制使用户能够更好地管理其 Web 服务的发布,并帮助使用您的服务的人轻松找到它。
冬夜先生
2022/02/27
1.3K0
将oracle驱动包加到maven中
2、确认maven环境变量已整确(cmd 中执行 mvn -v 显示maven的版本信息);
qubianzhong
2018/08/10
5060
Nexus高级配置之如何将本地jar添加到Nexus中
Java后端技术所推送文章,为本人原创、网上收集或其他作者投稿,对于网上收集部分除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!^_^ QQ:1573876303。
Java后端技术
2018/08/09
2.7K0
Nexus高级配置之如何将本地jar添加到Nexus中
微软计划将 ChatGPT 添加到 Bing 中,以吸引谷歌搜索用户
作者 | 褚杏娟 据彭博社报道,有知情人士透露,微软正准备将 OpenAI 的 ChatGPT 聊天机器人添加到其 Bing 搜索引擎中,以吸引竞争对手谷歌的用户。 这位知情人士表示,微软相信,对于搜索用户来说,提供更具对话性和上下文回复,可以比链接提供更好的答案,从而赢得用户。微软可能在未来几个月内推出附加功能,但现在仍在权衡聊天机器人的准确性以及将其纳入搜索引擎的速度。该知情人士表示,最初的版本可能是对一小部分用户的有限测试。 微软的 Bing 服务规模远小于 Alphabet Inc. 占主导地位的
深度学习与Python
2023/03/29
9270
微软计划将 ChatGPT 添加到 Bing 中,以吸引谷歌搜索用户
eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包
在 eclipse 中的 动态web项目 中,例如:我们通过向  /bos19/WebContent/WEB-INF/lib 中添加我们需要用到的jar包,如下图所示:
黑泽君
2018/10/11
6.3K0
eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包
dart - 将 orElse 函数添加到 firstWhere 方法
我正在尝试将 onElse 函数添加到 iterator.firstWhere 方法,但我无法获得正确的语法。 我试过类似的东西
徐建国
2021/08/31
1.6K0
将Emoji表情添加到项目中 顶
选择完需要的表情,点击消息预览就可以看到效果了,有一个微笑表情是QQ表情~~ 可以不用管它。
linapex
2019/03/26
1.8K0
将Emoji表情添加到项目中
                                                    顶
如何将MV中的音频添加到EasyNVR中做直播背景音乐?
EasyNVR已经支持自定义上传音频文件,可以做慢直播场景使用,前两天有一个开发者提出一个问题:想把一个MV中的音频拿出来放到EasyNVR中去做慢直播。
EasyNVR
2021/10/28
4.1K0
如何将MV中的音频添加到EasyNVR中做直播背景音乐?
将程序添加到右键菜单快速启动
打开注册表编辑器:按下 Win + R 键,输入 regedit,然后按回车键打开注册表编辑器。
浪漫主义狗
2023/09/04
4620
将程序添加到右键菜单快速启动
PostgreSQL中的多版本并发控制-MVCC
MVCC , Multi - Version Concurrency Control , 多版本控制并发
小徐
2020/05/01
1.9K0
PostgreSQL中的多版本并发控制-MVCC
IntelliJ IDEA 中的版本控制介绍(下)
在「IntelliJ IDEA 中的版本控制介绍」中,我们已经简单了解了 IntelliJ IDEA 的版本控制机制,那么接下来,就让我们一起看看在 IntelliJ IDEA 中进行具体的版本控制操
CG国斌
2018/01/26
2K0
PostgreSQL中的多版本并发控制-MVCC
MVCC , Multi - Version Concurrency Control , 多版本控制并发
小徐
2020/05/12
1.6K0
PostgreSQL中的多版本并发控制-MVCC

相似问题

SSIS包版本控制

30

控制Python包版本

11

厨师包版本控制

30

版本控制中的Oracle包?

50

查看package.json,将版本添加到包中

11
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文