使用列名作为变量创建 data.table
Create data.table with column names as variable
我遇到了这个尴尬的问题,我想了解为什么它不起作用。
test <- rbind(test, data.table(evalq(names(test)[1]) = rep("", 5),
evalq(names(test)[2]) = rep("", 5)))
问题出在这里:
data.table(evalq(names(test)[1]) = rep("", 5),
evalq(names(test)[2]) = rep("", 5)))
我试图用 eval(names(test)[1])
或 names(test)[1]
替换 evalq(names(test)[1])
但没有解决这个问题。
奇怪的是这个版本没有问题:
data.table("var1" = rep("", 5), "var2" = rep("", 5)))
谢谢你的帮助:)
names(test)[1]
的使用是错误的,因为您指向的是列名,而您没有提取要用作变量的列名。来自 ?evalq
:
The evalq
form is equivalent to eval
(quote(expr), ...). eval evaluates its first argument in the current scope before passing it to the evaluator: evalq
avoids this.
之后,
eval
evaluates the expr argument in the environment specified by envir
and returns the computed value.
您不能将它用作列表的变量名。我想它只适用于环境级别。
如果您想将来自 colnames 的信息用作可变名称,您可以这样做:
assign(names(test)[1], rep("", 5))
但这对你的情况不起作用,因为它总是与环境有关。
正在执行:
test <- rbind(test, data.table(assign(names(test)[1], rep("", 5)),
assign(names(test)[2], rep("", 5))))
您将遇到错误,但您在全局环境中还将有 2 个变量,名为 names(test)[1]
和 names(test)[2]
,其中包含“” 5 次。
如果你不知道手动设置colnames,你可以这样做:
一个测试数据帧
test<-data.frame(Date=c("Jan-2002","Feb-2002","Mar-2002","Apr-2002","May-2002","Jun-2002"),
"Value"=c(3.1,2.86,3.37,3.8,3.78,3.61))
使用包 data.table
中的 rbindlist
进行绑定
test <- rbindlist(list(test, data.frame(cbind(rep("", 5),rep("", 5)))),use.names = F)
输出
test
Date Value
1: Jan-2002 3.1
2: Feb-2002 2.86
3: Mar-2002 3.37
4: Apr-2002 3.8
5: May-2002 3.78
6: Jun-2002 3.61
7:
8:
9:
10:
11:
我遇到了这个尴尬的问题,我想了解为什么它不起作用。
test <- rbind(test, data.table(evalq(names(test)[1]) = rep("", 5),
evalq(names(test)[2]) = rep("", 5)))
问题出在这里:
data.table(evalq(names(test)[1]) = rep("", 5),
evalq(names(test)[2]) = rep("", 5)))
我试图用 eval(names(test)[1])
或 names(test)[1]
替换 evalq(names(test)[1])
但没有解决这个问题。
奇怪的是这个版本没有问题:
data.table("var1" = rep("", 5), "var2" = rep("", 5)))
谢谢你的帮助:)
names(test)[1]
的使用是错误的,因为您指向的是列名,而您没有提取要用作变量的列名。来自 ?evalq
:
The
evalq
form is equivalent toeval
(quote(expr), ...). eval evaluates its first argument in the current scope before passing it to the evaluator:evalq
avoids this.
之后,
eval
evaluates the expr argument in the environment specified byenvir
and returns the computed value.
您不能将它用作列表的变量名。我想它只适用于环境级别。
如果您想将来自 colnames 的信息用作可变名称,您可以这样做:
assign(names(test)[1], rep("", 5))
但这对你的情况不起作用,因为它总是与环境有关。
正在执行:
test <- rbind(test, data.table(assign(names(test)[1], rep("", 5)),
assign(names(test)[2], rep("", 5))))
您将遇到错误,但您在全局环境中还将有 2 个变量,名为 names(test)[1]
和 names(test)[2]
,其中包含“” 5 次。
如果你不知道手动设置colnames,你可以这样做:
一个测试数据帧
test<-data.frame(Date=c("Jan-2002","Feb-2002","Mar-2002","Apr-2002","May-2002","Jun-2002"),
"Value"=c(3.1,2.86,3.37,3.8,3.78,3.61))
使用包 data.table
rbindlist
进行绑定
test <- rbindlist(list(test, data.frame(cbind(rep("", 5),rep("", 5)))),use.names = F)
输出
test
Date Value
1: Jan-2002 3.1
2: Feb-2002 2.86
3: Mar-2002 3.37
4: Apr-2002 3.8
5: May-2002 3.78
6: Jun-2002 3.61
7:
8:
9:
10:
11: