gpt4 book ai didi

r - 使用与列同名的变量对 data.table 进行子集化

转载 作者:行者123 更新时间:2023-12-03 11:43:09 25 4
gpt4 key购买 nike

我想对 data.table 进行子集化使用与列同名的变量会导致一些问题:

dt <- data.table(a=sample(c('a', 'b', 'c'), 20, replace=TRUE),
b=sample(c('a', 'b', 'c'), 20, replace=TRUE),
c=sample(20), key=c('a', 'b'))

evn <- environment()
a <- 'b'
dt[a == a]

#Expected Result
dt[a == 'b']

我遇到了 this possible solution :
env <- environment()
dt[a == get('a',env)]

但它和以下一样不方便:
this.a = a
dt[a == this.a]

那么还有另一种优雅的解决方案吗?

最佳答案

目前,一个临时解决方案可能是,

`..` <- function (..., .env = globalenv())
{
get(deparse(substitute(...)), env = .env)
}

..(a)
## [1] "b"

dt[a==..(a)]
## a b c
## 1: b a 15
## 2: b a 11
## 3: b b 8
## 4: b b 4
## 5: b c 5
## 6: b c 12

尽管这看起来很优雅,但我仍在等待针对此类范围问题的更强大的解决方案。

根据@mnel 的建议编辑,
`..` <- function (..., .env = sys.parent(2))
{
get(deparse(substitute(...)), env = .env)
}

关于r - 使用与列同名的变量对 data.table 进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com