我试着根据任意列列表计算欧几里得距离.我try 这样做来计算dt
中的观测值和x
中的单个观测值之间的距离.这看起来像预期的那样计算,但是我在第4行得到了一个警告,因为我没有通过引用赋值.
dt <- data.table(a=1:10, b=11:20, c=21:30)
x <- data.table(a=5, b=6, c=7)
for(i in names(dt)){
dt[[i]] <- (dt[[i]] - x[1][[i]])^2
}
dt[, euclid := rowSums(.SD), .SDcols=names(dt)]
dt[, euclid := sqrt(euclid)]
所以我把第4行替换为setattr(dt, i, (dt[[i]] - x[1][[i]])^2)
行,但实际上它并没有更新列.
我可能误解了setattr()
的工作原理.我以为下面的两行是等价的,但显然不是.
dt[, foo := 2]
setattr(dt, "foo", 2)
我欢迎任何 idea 以及建议,以更好的方式做这件事.
我有数据.表v1.15.4