У меня есть матрица (15000 х 3000). Цель состоит в том, чтобы сгенерировать новую матрицу в соответствии с исходной матрицей и начальными значениями. Например, критерии, которые я хотел бы реализовать, таковы:
Вот как мой код настроен на данный момент.
DF1[1,]=1
for( i in 2:2000 ) {
for( j in 1:15000 ) {
if(DF[j,i] == 1 && DF1[j-1,i] == 0)
DF1[j,i] = 1
else if(DF[j,i] == 0 && DF1[j-1,i] == 1)
DF1[j,i] = 0
else DF[j,i,1] = DF1[j-1,i]
}
}
DF — исходная матрица.
DF1 — новообразованная матрица
Мой вопрос: Есть ли другой способ сделать это? Более быстрый способ?
Так как вложенные циклы плохо работают, я пытаюсь использовать apply, но не знаю, как написать функцию, потому что она связана с двумя матрицами.
Пример
x <- structure(c(1L, 0L, 0L, NA, NA, 0L, NA, 0L, 1L, 0L, 1L, 0L, 0L,
NA, 0L, NA, 1L, NA, 1L, 0L, 1L, 0L, 1L, 0L), .Dim = c(4L, 6L), .Dimnames = list(
NULL, NULL))
x
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 NA 1 0 1 1
#[2,] 0 0 0 NA NA 0
#[3,] 0 NA 1 0 1 1
#[4,] NA 0 0 NA 0 0
И петля (которая не работает)
for( i in 1:4 ) {
for( j in 2:4 ) {
if(x[j,i] == 1 && y[j-1,i] == 0) {
y[j,i] = 1
}else{
if(x[j,i] == 0 && y[j-1,i] == 1) {
y[j,i] = 0
}else{
y[j,i] = y[j-1,i]
}
}
}
DF[j,i,1]
3-мерный? - person jogo   schedule 26.12.2015y[j,i,1]
наy[j,i]
- это правильно?? - person user20650   schedule 26.12.2015x
иy
, отсутствует}
в конце. Вы не инициализировалиy
. Матрицаx
содержитNA
; вы не можете проверить равенство с числом. Каким должно бытьy
, если вx
есть записьNA
? Вы должны использовать встроенныйis.na
. - person Bhas   schedule 26.12.2015x
иy
, а также матрицы, которую вы ожидаете получить? Только после этого переходите к описанию того, что вы пробовали и почему вы думаете, что это не удалось. Прямо сейчас я нахожу ваш вопрос слишком сложным - не потому, что проблема сложна, а потому, что трудно понять, что именно является проблемой. - person Mirek Długosz   schedule 26.12.2015