使用assign函数为矩阵命名后类变为logi,如何保留matrix类?
解决assign创建矩阵后元素类型变为logical的问题
嘿,我来帮你捋清楚这个问题~首先得纠正一个小误解:你创建的对象类依然是matrix,只是它的元素存储类型变成了logical(也就是布尔型),这其实和assign函数没关系——哪怕你直接写m <- matrix(nrow=1,ncol=8),typeof(m)也会显示是logical,因为matrix()在不指定初始数据的情况下,默认会生成逻辑型矩阵。
不过没关系,我们可以通过这几种方式解决,同时完美保留矩阵的类:
方法1:创建矩阵时指定初始值类型
最简单的方式就是在matrix()里传入一个指定类型的初始值,比如数值型的0:
for(i in 1) { # 如果你说的Test是向量,这里用Test[1]就够了(向量只有一维下标) nam <- as.character(Test[1]) # 用as.character比paste更稳妥,避免多余的字符串拼接 # 传入0作为初始值,矩阵就会是数值型,类依然是matrix assign(nam, matrix(0, nrow=1, ncol=8)) }
方法2:显式设置矩阵的存储类型
如果不想给初始值,也可以用mode参数直接指定矩阵元素的类型:
assign(nam, matrix(nrow=1, ncol=8, mode = "numeric"))
这样生成的矩阵元素是数值型,类保持matrix不变。
额外小建议:尽量避免用assign动态创建变量
在R里用assign动态生成变量其实不是最优实践,后续找变量、操作变量都会很麻烦。更优雅的做法是用列表来管理这些矩阵:
# 用列表存储,清晰又方便 mat_list <- list() mat_list[[as.character(Test[1])]] <- matrix(0, nrow=1, ncol=8) # 调用的时候直接用 mat_list$你的矩阵名 或者 mat_list[["你的矩阵名"]] 就可以了
最后你可以用class(你的变量名)查看对象的类,用typeof(你的变量名)查看元素的存储类型,就能确认矩阵类是否保留啦~
内容的提问来源于stack exchange,提问作者Mucteam
相关产品推荐
相关产品推荐

