需要帮助通过R中的串联循环

时间:2019-03-20 02:32:37

标签: r for-loop

嗨,我正在尝试返回虹膜数据集中所有列的子集的字符串。我要查找的输出是'iris $ Sepal.Length','iris $ Sepal.Width','iris $ Petal.Length','iris $ Petal.Width','iris $ Species'。

我尝试了以下代码,使用paste0函数进行了for循环,但未返回任何结果。

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

我该如何解决?

2 个答案:

答案 0 :(得分:5)

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"   

答案 1 :(得分:0)

使用您自己的逻辑,可以按以下方式更正您的代码:

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的解决方案是优雅的模式。我只是想展示可以对您的特定循环进行的更正。