R data.table,访问赋值函数内的矩阵

标签 r data.table vectorization

我有以下数据表

structure(list(xi = c(1, 1, 1, 2, 2, 2, 3, 3, 3), yi = c(1, 2, 
3, 1, 2, 3, 1, 2, 3), flag = c(0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("xi", 
"yi", "flag"), row.names = c(NA, -9L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x11a1a78>)

我还有一个 3x3 矩阵,如下所示。

structure(c(1, 1, 0.4, 1, 0, 0, 1, 0, 0.2), .Dim = c(3L, 3L))

我想为 data.table flag 分配第三列,这样如果矩阵中的元素由 xi 行和 yi 列小于 1,则 flag = 1 else 0。为此我写了一个函数,

func <- function (x, y, m) {
if (m[x, y] < 1) {
    return(1)
}
else {
    return(0)
}
}

但是,如果我尝试

y[,flag := func(xi,yi,m)]

我的标志值始终为 0。有人可以指出我在这里做错了什么吗? 提前致谢。

最佳答案

您不需要自定义函数...

dt[ , flag := as.integer( m[cbind(xi,yi)] < 1 ) ]

您确实需要注意以正确的方式索引矩阵(使用 cbind(...) 而不是 [,] 形式的索引)。

关于R data.table,访问赋值函数内的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671696/

相关文章:

r - 子集的子集上的平均值

python - 使用 numpy 对值进行向量化计算,这需要先前计算的值

使用 R & data.table 或 HIVE 将\\N 替换为 NA

matlab - "kron"产品的多维版本?

Java - 在相同对象的数组上重用标量方法

arrays - 在R中匹配两个向量

r - 如何根据 Shiny 的输入选择对数据框进行子集化并使用传单进行绘图

r - ifelse() 函数 - 引用第二天

r - 使用 ggplot 和 gtable 对齐多个图

r - 向后而不是向前更有效地滚动连接?