Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么data.table中没有“qc()”;带“=FALSE”的;论点_R_Data.table - Fatal编程技术网

R 为什么data.table中没有“qc()”;带“=FALSE”的;论点

R 为什么data.table中没有“qc()”;带“=FALSE”的;论点,r,data.table,R,Data.table,我正在R中使用wrapr包。 函数qc()非常有用,可以避免多次键入引号,例如在指定列名时。然而,一个小问题是,在Rdata.table中,当尝试使用qc()选择列名时,我们总是需要with=FALSE。data.table文档说明with=FALSE将很快被弃用。那么,什么是更好的方法呢?请参见此示例: library(wrapr) library(data.table) x <- data.table(firstcol=1:3,secondcol=letters[1:3]) x[,"

我正在R中使用
wrapr
包。 函数
qc()
非常有用,可以避免多次键入引号,例如在指定列名时。然而,一个小问题是,在R
data.table
中,当尝试使用
qc()选择列名时,我们总是需要
with=FALSE
。data.table文档说明
with=FALSE
将很快被弃用。那么,什么是更好的方法呢?请参见此示例:

library(wrapr)
library(data.table)

x <- data.table(firstcol=1:3,secondcol=letters[1:3])
x[,"secondcol"] # works 
   secondcol
1:         a
2:         b
3:         c

x[,c("secondcol")] # works 
   secondcol
1:         a
2:         b
3:         c

编辑后回答

这与
数据有关。表
的唯一子集(请参见
?特殊符号
)。虽然可以使用
with=FALSE
,但这已被记录为“不再需要”,很快可能会被弃用。我们可以采取以下措施:

x[,.SD,.SDcols = qc(secondcol)]
   secondcol
1:         a
2:         b
3:         c
回答:

如果您查看
?qc

qc()一个方便的函数,允许用户删除多余的引号。它引用其参数,而不是对其求值,除非是对qc()或c()的嵌套调用。有关命名和未命名字符向量的典型用法,请参见示例

qc()使用bquote().()准旋转转义符号

它显示
qc
使用
bquote
,它将返回字符串not
eval
uated对象。例如,见:
qc(iris)

以上内容将返回:

qc(iris)
[1] "iris"
现在,如果我们将此应用于问题,使用
-qc(iris)
将正确地给出错误:

-qc(iris)中出错:一元运算符的参数无效

要解决这个问题,我们需要评估参数。我个人会使用
bquote
和其他
base
替代方案:

x[,-eval(bquote(firstcol))]
[1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10

x[, qc(firstcol)]
#[1] "firstcol"
x[, -get(qc(firstcol))]
#[1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10
# using eval(substitute(...))
 x[,-eval(substitute(firstcol))] 
 [1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10
# tidyverse-like
 x[,-rlang::eval_tidy(firstcol)] 
[1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10

你试过了吗?我想它用错了
qc
使用
bquote
返回带引号的字符串,而不是对象本身。可能使用
替换
之类的?
x[,qc(firstcol)]
似乎对我也不起作用?返回“firstcol”@BenBolker,感谢您的关注。我们现在有一个修改后的问题。我向大家道歉。这个问题需要一点改变,结果是
qc()
在改变的场景中也起作用。更改
with=F
插入data.table时,一元运算符起作用。我确实发现了glue和许多其他使用文本解析的方法,因此非常感谢大家。我应该删除问题还是修改它,因为
with=F
不存在问题。我认为最好返回到上一个问题,并添加一个答案,说明它与
with=FALSE
一起工作。我注意到with=FALSE参数在
[.data.table
文档中被声明为“不再需要”。我已经修改了该问题,使其更接近问题所在。我还删除了对“一元”的引用,因为这不是根本问题。@SanjayMehrotra我已经编辑了答案,以显示当前问题的备选答案。
x[,-eval(bquote(firstcol))]
[1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10

x[, qc(firstcol)]
#[1] "firstcol"
x[, -get(qc(firstcol))]
#[1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10
# using eval(substitute(...))
 x[,-eval(substitute(firstcol))] 
 [1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10
# tidyverse-like
 x[,-rlang::eval_tidy(firstcol)] 
[1]  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10