R: требуется оператор for, позволяющий использовать значения из каждой строки - PullRequest
0 голосов
/ 06 января 2012

Я довольно новичок в R ..

Я читаю в файле, который выглядит так:

1 2 1
1 4 2
1 6 4

и сохранение его в матрице:

matrix <- read.delim("filename",...)

Кто-нибудь знает, как сделать оператор for, который суммирует первые и последние числа одной строки за итерацию?

Таким образом, результат будет:

2
3
5

Большое спасибо!

Редактировать: Плохо, я должен был это прояснить ... На самом деле меня больше интересует фактический цикл for, где я могу использовать несколько значений из любого столбца в этой конкретной строке в каждой итерации. Суммирующие числа были только примером. На самом деле я планирую сделать гораздо больше с этими значениями (для более чем 2 столбцов), и есть много строк.

Так что-то в строках:

for (i in matrix_i) #where i means each row
{
#do something with column j and column x from row i, for example add them up
}

Ответы [ 4 ]

4 голосов
/ 06 января 2012

Что-то в этом духе должно работать довольно эффективно (т.е. это векторизованный подход):

m <- matrix(c(1,1,1,2,4,6,1,2,4), 3, 3)
#      [,1] [,2] [,3]
# [1,]    1    2    1
# [2,]    1    4    2
# [3,]    1    6    4

v <- m[,1] + m[,3]
# [1] 2 3 5
4 голосов
/ 06 января 2012

Если вы хотите извлечь из этого вектор, проще (и немного вычислительно быстрее) использовать apply вместо оператора for. В этом случае

sums = apply(m, 1, function(x) x[1] + x[3])

Кроме того, вы не должны называть свои переменные «матрицей», так как это имя встроенной функции.

ETA: есть еще более простой и вычислительный способ. R позволяет вам вытащить столбцы и добавить их вместе (поскольку они являются векторами, они будут добавлены поэлементно):

sums = m[, 1] + m[, 3]

m [, 1] означает первый столбец данных.

1 голос
/ 06 января 2012

Вы, вероятно, можете использовать функцию применения или векторизованный подход - и если вы можете, действительно следует, но вы спрашиваете, как это сделать в цикле for, так что вот как это сделать,(Давайте назовем вашу матрицу m.)

results <- numeric(nrow(m))
for (row in nrow(m)) {
    results[row] <- m[row, 1] + m[row, 3]
}
0 голосов
/ 06 января 2012

Это, наверное, один из тех 100 способов снять с кошки вопросы.Возможно, вы ищете функцию rowSums, хотя вы также можете найти много ответов, используя функцию apply.

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