在R中已知该矩阵的列数时,如何向该矩阵添加多列?

时间:2019-05-08 23:25:08

标签: r

我正在尝试创建一个函数来遍历作为矩阵加载的.csv文件(我在函数上逐个使用),这将添加第19、20、21、22、23和24列。这些矩阵都有18列,因此我从第19列开始,因此我不会擦除任何先前的数据。它应该首先提示第19和22列的数据(作为数字),然后计算其余各列的数据。我不断收到“新列将在现有列之后留下漏洞”的消息。

我尝试从尝试分配矩阵[,19]切换到执行cbind(matrix,c(“ 19列的名称”,“ 20列的名称”,等等)都无效。

func<- function(matrix){
  cbind(matrix, c("name19","name20", "name21", "name22", "name23", "name24"))
  matrix[,19] <- as.numeric(readline(prompt = "enter number ")) 
  matrix[,22] <- as.numeric(readline(prompt = "enter number "))
  matrix[x,20] <- 1.25*(matrix$colname10[x]/4) 
  matrix[x,21] <- matrix[x,20]/(15*matrix[x,19])
  matrix[x,23] <- 1.25*(matrix$colname13[x]/4) 
  matrix[x,24] <- matrix[x,23]/(15*matrix[x,22]) 
    }
func(matrixwith18cols)

这给了我错误

我得到

,而不是添加新列并对我要求的观测值进行数学运算并添加新观测值,而得到

Error in `[<-.data.frame`(`*tmp*`, , 22, value = 1) : 
  new columns would leave holes after existing columns

在控制台中(在我都输入1作为两个提示后)

1 个答案:

答案 0 :(得分:1)

我将创建一个要添加的矩阵(在您的cbind中,您将矩阵绑定到一个矢量,我不知道R对它会有什么反应)。

此外,您的cbind函数的输出未保存在新矩阵中。 所以我会怎么做:

mat.to.add = matrix(NA, nrow = nrow(matrix), ncol = 6)
marix = cbind(matrix, mat.to.add)

然后进行数学运算