#r #for-loop
#r #для-петли
Вопрос:
Я хочу использовать цикл for, который обрабатывает элементы в векторе как объекты.
df lt;- tibble(hallo1 = "test", hallo2.1 = "test", bye1 = "test", bye2.1 = "test") segmente lt;- c("hallo", "bye") for(i in segmente){ assign(i, df[grepl(i, names(df))]) # first step assign(paste0(i, "_1"), i[!grepl("\.", names(i))]) # second step }
Первый шаг в цикле for работает по назначению и создает объекты «привет» и «пока» в виде тибблов. Второй шаг работает не так, как предполагалось, потому что, я предполагаю, что в
i[!grepl("\.", names(i))]
i рассматривается как строка, а не как созданные элементы «привет «и » пока», в результате чего получаются строки empy, в то время как они также должны быть пустыми, содержащими только столбцы без».».
Как я могу написать это так, чтобы я был идентифицирован в том, что это такое, созданный объект на первом шаге?
Комментарии:
1.
i
не имеет имен. Иi
не является вектором (что вы имели в виду, когда писалиi[...]
)2. на втором шаге «я» должно быть двумя тибблами, привет и пока, которые я хочу подмножествовать с помощью [ … ] скобок. Но код идентифицирует их как две строки.
3. Попробуйте
get(i)[!grepl("\.", names(get(i)))]
, потомуi
что это не пустяк.4. похоже, это работает. вы хотите отправить его в качестве ответа?
5. Я не знаю правил этого сообщества. Я могу отправить его в качестве ответа, но хороший ли это способ?
Ответ №1:
На первом шаге цикла i
«алло» и не имеет имен. Если вы хотите позвонить тибблу по имени «привет», используйте get(i)
.