Рассматривайте элементы в цикле for как объекты, а не строки

#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) .