Для цикла с десятичной дробью в R

#r #loops

#r #петли

Вопрос:

Я пытаюсь выполнить цикл по десятичной системе счисления от 0,1 до 0,5, где приращение равно 0,05. Мне удалось распечатать результат с помощью приведенных ниже кодов, но я хотел бы сохранить результаты во фрейме данных.

 s <- seq(0.1,0.5, by = 0.05 )

for (i in s) {
print(data$ABC >= i)
}
 

Я попробовал этот код, чтобы попытаться сохранить результаты, но я получил таблицу с надписью «В таблице нет данных». Как я могу это исправить? Спасибо.

 s <- seq(0.1,0.5, by = 0.05 )
test <- vector("numeric")
for (i in s) {
test[i] <- (data$ABC >=i)
}
View(test)
 

Ответ №1:

Вы можете сохранить результаты в списке, а затем связать их для объединения.

 result <- vector('list', length(s))
for (i in seq_along(s)) {
  result[[i]] <- data$ABC >= s[i]
}
result1 <- do.call(cbind, result)
 

Однако вы также можете сделать это с sapply помощью, которая будет короче.

 result <- sapply(s, function(x) data$ABC >= x)
 

Комментарии:

1. Спасибо, что работает, можно ли переименовать мой столбец с помощью i?

2.Я попробовал приведенный ниже код, чтобы добавить i к имени моего столбца, но, похоже, я не могу получить желаемый результат. s <- seq(10,20, by = 1 ) result1 <- vector('list', length(s)) for (i in seq_along(s)) { result1[[i]] <- (allcrisis[,2:1081] >= s[i]) for (i in colnames(result1)) { paste(colnames,i, sep = "_") } } result2 <- do.call(cbind,result1)

3. Вам не нужно писать два for цикла. Скопируйте мой код как есть. После того, как вы сделаете result1 <- do.call(cbind, result) это colnames(result1) <- paste(colnames(result), s, sep = '_') . Извините, я написал i по ошибке в своем предыдущем комментарии.

4. Спасибо, с помощью этого кода мне удалось изменить свой столбец на A_1, B_2, A_1, B_2, но возможно ли получить A_1, B_1 и A_2, B_2?

5. Я вижу, что вы задали новый вопрос для этого и получили удовлетворительный ответ.