提问者:小点点

需要帮助在R中循环连接吗


嗨,我正在尝试返回iris数据集中所有列的子集字符串。我要寻找的输出是“iris$Sepal”。长度','鸢尾花$萼片。宽度','虹膜$花瓣。长度','虹膜$花瓣。宽度','虹膜$物种'。

我尝试了下面的代码,使用paste0函数执行for循环,但没有返回任何内容。

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

我怎样才能解决这个问题?


共2个答案

匿名用户

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"   

匿名用户

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

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