Нужна помощь в циклическом объединении в R - PullRequest
1 голос
/ 20 марта 2019

Привет. Я пытаюсь вернуть строки, которые содержат все столбцы в наборе данных iris. Вывод, который я ищу, это 'iris $ Sepal.Length', 'iris $ Sepal.Width', 'iris $ Petal.Length', 'iris $ Petal.Width', 'iris $ Species'.

Я попробовал следующий код ниже, делая цикл for с функцией paste0, но ничего не возвращается.

for(i in colnames(iris)){
    paste0('iris$',i , collapse ="")
}

Как я могу решить эту проблему?

Ответы [ 2 ]

5 голосов
/ 20 марта 2019

paste0 векторизован, так что вы можете напрямую выполнить

paste0("iris$", names(iris))
#[1] "iris$Sepal.Length" "iris$Sepal.Width"  "iris$Petal.Length" 
#    "iris$Petal.Width"  "iris$Species" 

В цикле for вам нужно явно указать R что-то сделать

for(i in colnames(iris)){
   print(paste0('iris$',i))
}

#[1] "iris$Sepal.Length"
#[1] "iris$Sepal.Width"
#[1] "iris$Petal.Length"
#[1] "iris$Petal.Width"
#[1] "iris$Species"

Или выможно сохранить в символьном векторе

string_name <- character(length = ncol(iris))
for(i in seq_along(names(iris))){
   string_name[i] <- paste0('iris$',names(iris)[i])
}

string_name
#[1] "iris$Sepal.Length" "iris$Sepal.Width"  
#"iris$Petal.Length" "iris$Petal.Width"  "iris$Species"   
0 голосов
/ 20 марта 2019

Используя вашу собственную логику, ваш код можно исправить следующим образом:

for( i in 1:length(colnames(iris)) ){
  print( paste0('iris$', colnames(iris)[i] , collapse ="") )
}

[1] "iris$Sepal.Length"
[1] "iris$Sepal.Width"
[1] "iris$Petal.Length"
[1] "iris$Petal.Width"
[1] "iris$Species"

Однако решение @ ronak-shah является элегантным в режиме.Я просто хотел показать исправления, которые можно внести в ваш конкретный цикл.

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