循环列表

时间:2016-03-26 10:15:33

标签: r

我有一个这种形式的列表:

  

s = c(“aa”,“bb”,“cc”,“dd”,“ee”,“xx”)

我想循环遍历此列表,直到考虑所有元素。然后我想检查每个元素是否不等于“空白”。如果不是我想要创建一个变量,它是“s”的每个元素和常量字符串的连接,请说“_file”。最后堆叠这些元素。

我创建的代码如下。但它给了我空白。

s = c("aa", "bb", "cc", "dd", "ee","xx")

t<-if(length(s)>0){
  for(i in s){
    if(length(s)>0){
      i2=i*"_file"
    }
    else{
      i2=''
    }
    i2<-c()
  }
}

我也试过这个。但它已经运行了很长时间。

s = c("aa", "bb", "cc", "dd", "ee","xx")
t<-while(s!=''){
  for(i in s){
    if(length(s)>0){
      i2=i*"_file"
    }
    else{
      i2=''
    }
    i2<-c()
  }
}

有人可以帮助我吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

可以使用nzchar

对其进行矢量化
s <- c("aa", "bb", "cc", "dd", "ee", "", "xx")
paste(s[nzchar(s)], "file", sep="_")
# [1] "aa_file" "bb_file" "cc_file" "dd_file" "ee_file" "xx_file"

答案 1 :(得分:2)

以下是sub

的选项
sub("^([a-z]+)$", "\\1_file", s)
#[1] "aa_file" "bb_file" "cc_file" "dd_file" "ee_file" ""        "xx_file"

数据

s <- c("aa", "bb", "cc", "dd", "ee", "", "xx")

答案 2 :(得分:2)

只是'非常简洁的一个班轮'

paste0(Filter(nchar, s), '_file')

答案 3 :(得分:1)

这是我要做的。我相信有更快的解决方案......

s <- c("aa", "bb", "cc", "dd", "ee","xx")
s[nchar(s)>0]<-paste0(s,"_file")

应该做的伎俩