【发布时间】:2017-05-13 22:39:33
【问题描述】:
(已编辑)
我正在使用以下代码在 data.table 中创建两列并用一些数字更新它们:
T <- data.table(Init_1 = rep(0, 100), Init_2 = rep(0, 100))
for (i in 1:100){
T[, Init_1 := i]
T[, Init_2 := 2*i]
}
我希望这段代码会在 data.table T 中添加两列(Init_1 和 Init_2),并分别用数字填充它们:(1:100) 和 (2,4,...200)。
但是,代码返回常量值:
> T
Init_1 Init_2
1: 100 200
2: 100 200
3: 100 200
4: 100 200
5: 100 200
6: 100 200
7: 100 200
8: 100 200
.................
您能否解释一下为什么我的代码没有按预期工作以及如何修复它?
您的建议将不胜感激。
编辑:
关于答案 2,最终我想在 for 循环中使用一个函数。更具体地说:
# A FUNCTION THAT RETURNS THE TRANSITION PROBABILITIES AFTER N STEPS IN A MARKOV CHAIN
#-------------------------------------------------------------------------------------
R <- function(P, n){
if (n==1) return(P)
R(P, n-1) %*% P
}
# A ONE-STEP PROBABILITY MATRIX
#---------------------------------------------------------------------------------------
P = matrix(c(0.6, 0.1, 0.3, 0.2, 0.7, 0.1, 0.3, 0.3, 0.4), nrow = 3, byrow = TRUE)
# EXAMINING THE CONVERGENCE PROCESS OF THE PROBABILITIES OVER TIME
#########################################################################
T <- data.table(Init_1 = rep(0, 100), Init_2 = rep(0, 100))
for (i in 1:100){
T[, Init_1 := R(P, i)[1,1]]
T[, Init_2 := R(P, i)[2,1]]
}
或
for (i in 1:100){
T[, ':=' (Init_1 = R(P, i)[1,1],
Init_2 = R(P, i)[2,1]) ]
}
【问题讨论】:
-
你不能在data.table中添加行,见here
-
:= 是干什么用的?
-
在 data.table := 中启用添加/更新列。例如。 DT[, c("V1","V2") := list(round(exp(V1),2), LETTERS[4:6])] (来自“DataCamp 课程的官方备忘单”)跨度>
标签: r data.table