Как добавить несколько столбцов в матрицу, если число столбцов для этой матрицы известно в R? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать функцию для просмотра CSV-файлов, загруженных в виде матриц (один за другим, когда я использую функцию для них), которая добавит 19-й, 20-й, 21-й, 22-й, 23-й и 24-й столбцы. У всех этих матриц будет 18 столбцов, поэтому я начинаю с 19 столбца, чтобы не стереть предыдущие данные. Сначала следует запросить данные для 19-го и 22-го столбцов (в виде чисел), а затем вычислить данные для остальных столбцов. Я продолжаю получать сообщение «новые столбцы оставят дыры после существующих столбцов».

Я пытался переключиться с простой попытки присвоить matrix [, 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 Ответ

1 голос
/ 09 мая 2019

Я бы создал матрицу для добавления (здесь, в вашем cbind, вы привязываете свою матрицу к вектору, я не знаю, как R отреагирует на это).

Кроме того, вывод вашей функции cbind не сохраняется в новой матрице. Итак, что бы я сделал:

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

и затем выполняйте свои математические операции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...