我有这个尴尬的问题,我想了解它为什么不起作用。
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)))
我尝试按evalq(names(test)[1])
或eval(names(test)[1])
重新names(test)[1]
,但没有解决此问题。
奇怪的是,这个版本没有问题:
data.table("var1" = rep("", 5), "var2" = rep("", 5)))
感谢您的帮助:)
答案 0 :(得分:0)
使用names(test)[1]
是错误的,因为您指向的是列名,并且您没有提取要用作变量的列名。来自?evalq
:
evalq
表单相当于eval
(quote(expr),...)。 eval在将其传递给求值程序之前计算当前作用域中的第一个参数:evalq
避免这种情况。
之后,
eval
计算envir
指定的环境中的expr参数,并返回计算值。
您不能将其用作列表的变量名称。我想它只适用于环境层面。
如果您想使用来自colnames的变量名称作为varibale名称,您可以这样做:
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次。
如果您没有手动设置名称,可以执行以下操作:
测试数据框
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))
使用包rbindlist
data.table
绑定
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: