【发布时间】:2012-08-22 18:52:40
【问题描述】:
我目前正在使用data.table 包中的set 函数在R 中进行一些测试,并具有以下代码:
dt= data.table(ans=rep(c(14,16),100))
dt[,voy:=0.0]
set(dt,which(dt[,ans]==14),"voy",log(dt[,ans]))
dt
请注意,我想使用 set 函数计算具有 ans=14 的情况的对数,但我没有得到正确的结果。这是我得到的结果:
ans voy
1: 14 2.639057
2: 16 0.000000
3: 14 2.772589
4: 16 0.000000
5: 14 2.639057
---
196: 16 0.000000
197: 14 2.639057
198: 16 0.000000
199: 14 2.772589
200: 16 0.000000
您可能会注意到,对于某些行,变量voy 的值是预期的log(14)=2.639057,但对于其他具有ans=14 的情况,它被分配2.772589=log(16)。所以,我认为我在滥用set 函数。我该如何解决这个问题?
我知道可以使用下一个代码来执行此操作:
dt[ans==14,voy:=log(ans)]
但我想把它翻译成set 函数语法。
【问题讨论】:
-
为什么?你展示了一个可行的、好的替代方案。为什么要用更复杂的东西代替它?
-
你是对的@Andrie,但我只是想确保我理解
set函数的工作方式。谢谢!
标签: r data.table