我正在尝试创建一个函数来遍历作为矩阵加载的.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作为两个提示后)
答案 0 :(得分:1)
我将创建一个要添加的矩阵(在您的cbind中,您将矩阵绑定到一个矢量,我不知道R对它会有什么反应)。
此外,您的cbind函数的输出未保存在新矩阵中。 所以我会怎么做:
mat.to.add = matrix(NA, nrow = nrow(matrix), ncol = 6)
marix = cbind(matrix, mat.to.add)
然后进行数学运算