Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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 以正确的方式添加到列_R_Datatable - Fatal编程技术网

R 以正确的方式添加到列

R 以正确的方式添加到列,r,datatable,R,Datatable,我有一个简单的DT,我想在其余部分添加一列。代码如下:(工程) 出现错误:“[…]对象“…k”未找到”。这似乎很奇怪,我必须在范围内更改语法 现在在dataframe中,等效公式非常清楚: for(k in c("a","b")){x[,k] <- x[,k]+x[,c]} # error with DT x <- data.frame(a=1:5,b=5:1,c=rep(999,5)) for(k in c("a","b")){x[,k] <- x[,k]+x[,"c"]}

我有一个简单的DT,我想在其余部分添加一列。代码如下:(工程)

出现错误:“[…]对象“…k”未找到”。这似乎很奇怪,我必须在范围内更改语法

现在在
dataframe
中,等效公式非常清楚:

for(k in c("a","b")){x[,k] <- x[,k]+x[,c]} # error with DT
x <- data.frame(a=1:5,b=5:1,c=rep(999,5))
for(k in c("a","b")){x[,k] <- x[,k]+x[,"c"]} # works with dataframe
for(k in c(“a”,“b”){x[,k]来自官方(为您的示例略加编辑):

对于熟悉Unix终端的用户,应使用..前缀 让人想起“上一级”命令,它类似于 这里发生了什么–向data.table发送..信号以查找 k变量“上一级”,即循环环境中 在这种情况下

所以这个操作符转义数据帧,在一个更高的级别上查找k变量,获取值并返回。不确定他们为什么这样做,但可能变量没有被传输

您还可以使用with参数:

x[,k,with=FALSE]


编辑:

我刚刚检查了data.table的源代码。它们从
parent.frame()
获取被调用的变量,因此调用函数的环境。这是由
或带有
参数的
触发的。因此,如果不使用它,函数将无法获取环境的参数


有关
parent.frame()
的问题,请参见
data.table
x[,k]
查找名为
k
的列,无论
k
是否是调用范围内的变量。如果定义
k,请感谢@nicola的解释。但是,这似乎仅适用于循环中赋值的右侧,而不适用于左侧。在
data.table
中,不使用修改列谢谢,这清楚地说明了它是如何工作的。只有一件事:你知道为什么会这样:
for(k in c(“a”,“b”){x[,k]@Talik3233不抱歉。源代码中的注释暗示开发人员知道这一点。以下内容也可能完全错误:我认为区别在于编写变量。当您将变量分配到数据帧时,您必须以某种方式保存它。我认为临时空间内部发生了一些事情。但我不能确切地告诉您w帽子。这只是我从线索和错误消息中想到的。总之:如果你想读或写你的数据表,这是不同的。谢谢,所以这个问题是有道理的。毕竟,很高兴知道:)它不适用于左侧,因为这是一个
data.frame
方法,在
data.table
中,你可以更改columns通过引用
:=
for(k in c("a","b")){x[,..k] <- x[,..k]+x[,.(c)]}
for(k in c("a","b")){x[,k] <- x[,k]+x[,c]} # error with DT
x <- data.frame(a=1:5,b=5:1,c=rep(999,5))
for(k in c("a","b")){x[,k] <- x[,k]+x[,"c"]} # works with dataframe