Элементарные проблемы с L oop в R - PullRequest
0 голосов
/ 24 марта 2020

Я работаю с циклами for в R;

У меня есть фрейм данных, который содержит n столбцов.

Мне нужно построить вектор длины n, где каждый элемент равен 1, если столбец двойной, иначе 0.

это то, что я пробовал:

y<-rep(0,dim.data.frame(datafr)[2])
attach(datafr)
x<-names(dat)
for (j in 1:length(x)){
  for(i in x){
    if(is.double(i)){
      y[j]<-1
    }else{
      y[j]<-0
    }
  }
}

Однако, это не работает, так как возвращаемый вектор y не имеет 1, а просто n 0 .

1 Ответ

0 голосов
/ 24 марта 2020
  1. Все столбцы в data.frame должны быть одного класса, поэтому вам нужно проверять только первое значение в столбце.

  2. A простой подход заключается в создании вектора с sapply, который зацикливается (в данном случае) на столбцах фрейма.

    datafr <- data.frame(a=1:5, b=1:5 + 0, d=letters[1:5])
    sapply(datafr, is.double)
    #     a     b     d 
    # FALSE  TRUE FALSE 
    
  3. Если необходимо использовать for l oop, это можно развернуть с помощью

    y <- integer(ncol(datafr)) # defaults to 0
    y
    # [1] 0 0 0
    for (j in seq_along(datafr)) {
      if (is.double(datafr[[j]])) {
        y[j] <- 1L
      }
    }
    y
    # [1] 0 1 0
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...