无法在R中的对象中保留for循环结果

时间:2015-06-01 16:02:29

标签: r

我有一个矢量调用ID如下:

id<-c("US_01_01", "US_01_02", "US_01_03", "UK_02_01", "UK_02_02", "UK_02_03", "CA_03_01", "CA_03_02", "CA_03_03")

我希望将输出以下面的格式保存到名为obj的对象中:

US  01  01
US  01  02
US  01  03
UK  02  01
UK  02  02
UK  02  03
CA  03  01
CA  03  02
CA  03  03

以下是我的代码:

sp<-strsplit(id,"_")

sp<-as.array(sp)

obj<-vector("list",dim(sp))

for (i in 1:dim(sp)){
    obj[[i]] <- cat(sprintf("%s %s %s\n", sp[[i]][1], sp[[i]][2], sp[[i]][3]))
}

但是,我不知道为什么输出无法保存到对象obj中。

谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

cat没有返回值。摆脱它......

for (i in 1:dim(sp)){
    obj[[i]] <- sprintf("%s %s %s\n", sp[[i]][1], sp[[i]][2], sp[[i]][3])
}

现在我们可以将这些项目连在一起:

obj_full <- do.call(paste0,obj)

你可以随时cat

cat(obj_full)
# US 01 01
# US 01 02
# US 01 03
# UK 02 01
# UK 02 02
# UK 02 03
# CA 03 01
# CA 03 02
# CA 03 03

当然,如果您想在循环期间cat,也可以为此添加另一行。

查找文档。&#34;价值&#34;帮助页面上的部分?cat解释说它什么都不返回。这部分有时会被省略,所以它也值得回顾一下&#34;描述&#34;部分。

答案 1 :(得分:2)

尝试 read.table(text=id, sep='_', colClasses=rep('character',3)) # V1 V2 V3 #1 US 01 01 #2 US 01 02 #3 US 01 03 #4 UK 02 01 #5 UK 02 02 #6 UK 02 03 #7 CA 03 01 #8 CA 03 02 #9 CA 03 03

 library(splitstackshape)
 cSplit(as.data.frame(id), 'id', sep='_', type.convert=FALSE)

或者

{{1}}

答案 2 :(得分:1)

试试这个:

matrix(sapply(strsplit(id,"_"),paste,collapse=" "),ncol=1)

#output
      [,1]      
 [1,] "US 01 01"
 [2,] "US 01 02"
 [3,] "US 01 03"
 [4,] "UK 02 01"
 [5,] "UK 02 02"
 [6,] "UK 02 03"
 [7,] "CA 03 01"
 [8,] "CA 03 02"
 [9,] "CA 03 03"