Can';t hold for循环导致R中的对象

Can';t hold for循环导致R中的对象,r,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") 以下是我的代码: sp<-strsplit(id,"_") sp<-as.array(sp) obj<-vector("list",dim(sp)) for (i in 1:dim(sp)){ ob

我有一个向量调用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")
以下是我的代码:

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]))
}
sp试试这个:

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"
试试这个:

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"

cat
没有返回值。摆脱它

for (i in 1:dim(sp)){
    obj[[i]] <- sprintf("%s %s %s\n", sp[[i]][1], sp[[i]][2], sp[[i]][3])
}
当然,如果您想在循环过程中
cat
,您只需添加另一行即可



查找文档。帮助页面上的“值”部分,
?cat
,说明它不返回任何内容。此部分有时会被省略,因此也值得查看“说明”部分。

cat
没有返回值。摆脱它

for (i in 1:dim(sp)){
    obj[[i]] <- sprintf("%s %s %s\n", sp[[i]][1], sp[[i]][2], sp[[i]][3])
}
当然,如果您想在循环过程中
cat
,您只需添加另一行即可



查找文档。帮助页面上的“值”部分,
?cat
,说明它不返回任何内容。此部分有时会被省略,因此也值得查看“说明”部分。

请尝试
read.table

 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


尝试读取表格

 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


cat
打印到控制台,您不能将
cat
的输出保存到对象
cat
打印到控制台,您不能将
cat
的输出保存到对象。您可能想去掉sprintf()命令中的新行“\n”。@untitled Why?粘贴时它可以用作分隔符,但如果没有它,所有内容都在一行上。当我运行它时,它是否存在似乎并不重要。@untitled ok。我不知道差异是从哪里来的,但谢谢你指出。@Frank谢谢你的解释。顺便说一句,我注意到使用“粘贴”而不是“粘贴0”会导致连接对象的第一行与下一行不对齐。我可以知道为什么会发生这种情况吗?可能要删除sprintf()命令中的新行“\n”。@未命名的原因?粘贴时它可以用作分隔符,但如果没有它,所有内容都在一行上。当我运行它时,它是否存在似乎并不重要。@untitled ok。我不知道差异是从哪里来的,但谢谢你指出。@Frank谢谢你的解释。顺便说一句,我注意到使用“粘贴”而不是“粘贴0”会导致连接对象的第一行与下一行不对齐。我可以知道为什么会这样吗?多亏了你的想法,我想出了另一种方法。cat(do.call(paste0,lappy(1:9,函数(i)sprintf(“%s%s%s\n”,sp[[i]][1],sp[[i]][2],sp[[i]][3]))上面的sp在转换为arrayThanks之前是sp。根据你的想法,我想出了另一种方法。cat(do.call(粘贴0,lappy(1:9,函数(i)sprintf(“%s%s%s\n”,sp[[i]][1],sp[[i]][2],sp[[i]][3]))上面的sp在转换为数组之前是sp
 library(splitstackshape)
 cSplit(as.data.frame(id), 'id', sep='_', type.convert=FALSE)