在R中将For循环的输出分配给变量

时间:2013-06-05 08:11:27

标签: r

我正在尝试在R中获得以下输出。

例如:第1组:机会职业学习

result <- vector("list",k)
for (i in 1:k) {
    s <- sort(kmeansResult$centers[i,], decreasing=T)
    result[[i]] <- print(paste("Cluster ", i, ": ", sep="", names(s)[1:3]))
}
result

但是,在上面的代码中,我不断获得“Cluster 1:opportunity”“Cluster 1:learning”“Cluster 1:career”。

以下代码效果很好(输出是 - 群集1:机会学习生涯),但是我需要将输出分配给变量(可能是列表?)以便打印到HTML文件中。如果我这样做的话,如何将整个for循环的输出分配给变量?

for (i in 1:k) {
    cat(paste("Cluster ", i, ": ", sep=""))
    s <- sort(kmeansResult$centers[i,], decreasing=T)
    cat(names(s)[1:3], "\n")
}

2 个答案:

答案 0 :(得分:1)

最好在这里使用lapply

  • 无副作用
  • 无需在循环前预先分配

例如:

res <- lapply(1:k,function(i) {
    cat(paste("Cluster ", i, ": ", sep=""))
    s <- sort(kmeansResult$centers[i,], decreasing=T)
    names(s)[1:3]
})

答案 1 :(得分:0)

来自?paste

  

如果参数是向量,则它们是逐个连接的,以给出字符向量结果。矢量参数根据需要进行回收,零长度参数被循环到“”。

     

...

     

如果为折叠指定了值,则结果中的值将连接成单个字符串,其中元素由折叠值分隔。

所以你想在你的字符串中添加collapse = " "。具体来说,就像这样(你也不需要print)。

result[[i]] <- paste0("Cluster ", i, ": ", paste(names(s)[1:3], collapse=" "))