如何用apply函数填充NA矩阵?求简化R语言重复赋值代码方案
简化R语言矩阵填充代码的方案
首先,用apply可以实现一行代码,但并非最优选择,因为apply需要先创建空矩阵再逐列替换,代码如下:
tmp <- t(apply(matrix(NA, 10, 10), 2, function(x) sample(1:500, 10)))
更简洁高效的替代方案有两种:
方案1:使用replicate(与原代码逻辑完全一致)
这是最贴合原需求的简化方式,replicate会重复执行指定表达式n次,并自动组合成矩阵:
tmp <- replicate(10, sample(1:500, 10))
该代码会生成10个独立的、从1-500无放回抽取的10元素向量,最终组合为10行10列的矩阵,和原代码逐列赋值的逻辑完全一致。
方案2:直接用matrix生成(全局无放回场景适用)
如果允许从1-500中无放回抽取100个元素再构造矩阵(和原代码逐列独立抽取的逻辑不同),可以用一行代码直接生成:
tmp <- matrix(sample(1:500, 100, replace = FALSE), nrow = 10)
注意:若需要每列独立抽取(和原代码一致),不要使用此方案,因为它是全局一次性抽取,列与列之间的元素不会重复。
内容的提问来源于stack exchange,提问作者M.C. Park
相关产品推荐
相关产品推荐

