У меня есть вопрос о написании циклов в R - PullRequest
0 голосов
/ 15 мая 2019

У меня есть две базы данных, одна включает 2283 строки информации о продуктах (USDA), а вторая - 621 тип продуктов со вкусом (Flavor). Я хотел использовать код grepl для распознавания аромата в каждой строке моего первого набора данных. Однако я не хочу писать код для каждого варианта по одному. Поэтому я решил написать цикл. Тем не менее, мой цикл не показывает несколько столбцов результатов для каждой проверки вкуса. Вместо этого он показывает результат последнего матча. Не могли бы вы помочь мне с этой проблемой?

для (я в 2: длина (Flavor $ Flavor_names) {

              result <-  cbind(USDA, Flavor=grepl(paste0(Flavor_names$FLAVOR.SCENT[i], collapse="|") , USDA$long_name)))

1 Ответ

0 голосов
/ 15 мая 2019

Перед началом цикла, подобного этому, вам нужно создать пустой объект, чтобы заполнить все результаты цикла. Такие как result <- NULL. Во-вторых, когда вы запускаете цикл, индексируйте выходной объект так же, как вы вводите объекты, например result[i]. Ваш цикл будет выглядеть так:

result <- NULL

for (i in 2:length(Flavor$Flavor_names){
result[i] <-  cbind(USDA, Flavor=grepl(paste0(Flavor_names$FLAVOR.SCENT[i], collapse="|") , USDA$long_name)))
}

Теперь results - это длина i, а в позициях 2 - length(Flavor$Flavor_names) у вас есть результаты цикла i-th. Обратите внимание, что индекс 1 будет NA, потому что вы начали цикл с 2. Вы могли бы избежать этого, если бы ваш цикл содержал result[i - 1].

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