【发布时间】:2017-02-08 14:56:06
【问题描述】:
我希望将数据表的列转换为另一个类,但无法使用字符串引用列。
set.seed(10238)
idt <- data.table(A = rep(1:3, each = 5), B = rep(1:5, 3),
C = sample(15), D = sample(15))
> idt
A B C D
1: 1 1 10 14
2: 1 2 2 2
3: 1 3 13 3
4: 1 4 7 1
5: 1 5 1 8
6: 2 1 11 15
7: 2 2 4 10
8: 2 3 15 7
9: 2 4 14 12
10: 2 5 5 9
11: 3 1 8 13
12: 3 2 3 4
13: 3 3 9 6
14: 3 4 6 11
15: 3 5 12 5
#All columns are integers
> lapply(idt, class)
$A
[1] "integer"
$B
[1] "integer"
$C
[1] "integer"
$D
[1] "integer"
vec = parse(text=c('A','B','C','D'))
for (i in vec) idt[, eval( i ) := as.character( eval(i) ) ]
Error in eval(expr, envir, enclos) : object 'A' not found*
我想通过循环一个向量来重新分配列类,该向量包含代表我要转换的列的名称的字符串。
我知道other threads 解决了同样的问题,但它们不是很容易理解。我的问题是为什么我不能循环遍历表达式和 eval 它们,就像我手动将 j 表达式中的 i 替换为每列的列名一样。
** 编辑不是重复的 **
我知道other threads 解决了同样的问题,但它们不是很容易理解。我的问题是为什么我不能循环遍历表达式和
eval它们,就像我手动将 j 表达式中的 i 替换为每列的列名一样。
【问题讨论】:
-
我猜你需要
for(i in vec) idt[, (i) := as.character(get(i))]wherevec <- names(idt) -
投票结束,因为this answer 非常适合您,并且基本上在下面的答案中重现
标签: r data.table