如何让R语言expand.grid生成numeric类型而非list类型?
解决R语言expand.grid返回list类型的问题
嘿,这个问题其实挺常见的——expand.grid()默认返回的是data.frame,而data.frame在R里的mode()确实会显示为"list"(因为data.frame本质就是由列向量组成的列表)。不过要得到numeric类型的对象,有几个超简便的办法:
转成数值矩阵:如果想要保留网格的二维结构,直接用
as.matrix()转换结果就行,转换后的对象mode就是"numeric":grid <- expand.grid(c(1,2), c(3,4)) numeric_grid <- as.matrix(grid) mode(numeric_grid) # 输出 "numeric"转成扁平化数值向量:如果需要把所有元素合并成一个一维的数值向量,可以用
unlist(),它会把data.frame的列向量展开成一个连续的numeric向量:grid_vec <- unlist(expand.grid(c(1,2), c(3,4))) mode(grid_vec) # 输出 "numeric"一步到位生成矩阵(进阶):如果不想先生成data.frame再转换,也可以直接用
outer()函数调整结构,不过这个方法的元素顺序和expand.grid略有不同,需要注意:# outer生成的是行优先的矩阵,和expand.grid的列优先顺序不同 outer_grid <- outer(c(1,2), c(3,4), FUN = cbind) # 若要和expand.grid的顺序完全一致,可转置后再展开: matching_vec <- as.vector(t(outer(c(1,2), c(3,4))))
不过最常用的还是前两种方法,简单直接就能满足需求~
内容的提问来源于stack exchange,提问作者papgeo
相关产品推荐
相关产品推荐

