本文介绍了R数据表,访问赋值函数内的矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我有以下data.table 结构(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 矩阵如下。 code>结构(c(1,1,0.4,1,0,0,1,0,0.2),.Dim = c(3L,3L)) / pre> 我想为data.table flag 指定一个第三列,由 xi 行和 yi 列表示的矩阵小于1,则 flag = 1 else 0.我为此写了一个函数, func if(m [x,y] return(1)} else { return(0)} } 但是,如果我尝试 y [,flag:= func(xi,yi,m)] 我的标志值总是0.有人可以指出我在这里做错了吗? 提前感谢。解决方案您不需要自定义函数... dt [,flag:= as.integer(m [cbind(xi,yi)]< 1)] 你需要小心的以正确的方式索引矩阵(使用 cbind / code>而不是 [,] 形式的索引)。 I've the following data.tablestructure(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>)I also have a 3x3 matrix as below.structure(c(1, 1, 0.4, 1, 0, 0, 1, 0, 0.2), .Dim = c(3L, 3L))I want to assign a third column to the data.table flag such that if the element in the matrix represented by the xi row and yi column is less than 1, then flag = 1 else 0. I wrote a function for this,func <- function (x, y, m) {if (m[x, y] < 1) { return(1)}else { return(0)}}However, if I try y[,flag := func(xi,yi,m)]my flag values are always 0. Could someone point out what I'm doing wrong here?Thanks in advance. 解决方案 You don't need a custom function...dt[ , flag := as.integer( m[cbind(xi,yi)] < 1 ) ]You do need to be careful to index the matrix in the correct way (using cbind(...) rather than [,] form of indexing). 这篇关于R数据表,访问赋值函数内的矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-17 00:59