функция «если» применяется к каждой ячейке - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь выполнить функцию для каждой ячейки таблицы данных в R. Я хочу добавить ячейки на 3, если они> 0.

Пример:

mat <- matrix(data=0:9, nrow=5, ncol=10, byrow=F)
mat3 <- apply(mat, MARGIN = 1, FUN= function(mat) if(mat != 0) {mat+3})

Но сначала это создало список длиной 5, а во-вторых, это все ячейки, которые добавляются за 3.

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Вам не нужно применять, можете использовать ifelse напрямую:

ifelse(mat > 0, mat+3, mat)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    8    0    8    0    8    0    8    0     8
[2,]    4    9    4    9    4    9    4    9    4     9
[3,]    5   10    5   10    5   10    5   10    5    10
[4,]    6   11    6   11    6   11    6   11    6    11
[5,]    7   12    7   12    7   12    7   12    7    12

Но более быстрое решение будет:

mat[mat > 0] <- mat[mat > 0] + 3
mat
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    8    0    8    0    8    0    8    0     8
[2,]    4    9    4    9    4    9    4    9    4     9
[3,]    5   10    5   10    5   10    5   10    5    10
[4,]    6   11    6   11    6   11    6   11    6    11
[5,]    7   12    7   12    7   12    7   12    7    12
0 голосов
/ 16 сентября 2018

Мы также можем сделать это на лету с

mat + (mat > 0) * 3
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    0    8    0    8    0    8    0    8    0     8
#[2,]    4    9    4    9    4    9    4    9    4     9
#[3,]    5   10    5   10    5   10    5   10    5    10
#[4,]    6   11    6   11    6   11    6   11    6    11
#[5,]    7   12    7   12    7   12    7   12    7    12
0 голосов
/ 16 сентября 2018
apply(mat, 2, function(x) { 
  ifelse(x > 0, x+3, x)})

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    8    0    8    0    8    0    8    0     8
[2,]    4    9    4    9    4    9    4    9    4     9
[3,]    5   10    5   10    5   10    5   10    5    10
[4,]    6   11    6   11    6   11    6   11    6    11
[5,]    7   12    7   12    7   12    7   12    7    12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...