0

我在构建一个循环时遇到问题,该循环通过附加循环的结果为我提供了一个表。

现在它水平添加列(变量)而不是垂直添加行。

也许 append 不是正确的功能?或者有没有办法让它垂直附加?或者也许我只是认为我正在制作一张桌子,但它实际上是其他一些结构?

我找到的解决方案使用了 rbind,但我没有弄清楚如何使用 rbind 函数设置循环。

for (i in 1:3) {
  users.humansofnewyork = append(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}

非常感谢你的答复。不幸的是,没有一个解决方案奏效。

这是完整的代码:

#start the libaries
library(Rfacebook)
library(Rook)
library(igraph)

#browse to facebook and ask for token
browseURL("https://developers.facebook.com/tools/explorer")

token <- "...copy and paste token"

#get Facebook fanpage "humansofnewyork" with post id
humansofnewyork <- getPage("humansofnewyork", token, n=500)

users.humansofnewyork = c()

for (i in 1:3) {
  users.humansofnewyork = append(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}
4

3 回答 3

1

append用于向量。你应该使用cbind, 的列兄弟rbindgetPost(我复制了您的代码;如果在每次调用中不返回相同长度的向量,则不保证成功)

for (i in 1:3) {
  users.humansofnewyork = cbind(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}
于 2014-04-03T13:41:33.047 回答
0

如果 的结果与getPost中的列具有相同的元素,则users.humansofnewyork应该可以:

for (i in 1:3) {
  users.humansofnewyork[nrow(users.humansofnewyork) + 1, ] = getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500)
}

或者,使用rbind

for (i in 1:3) {
  users.humansofnewyork = rbind(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}

但是,如果其中的任何列users.humansofnewyork是 afactor并且任何新数据包含新级别,则您必须首先添加新的因子级别,或者将这些列转换为character.

希望这可以帮助。如果您提供了一个可重现的示例,这将对我们有所帮助。

于 2014-04-03T13:43:43.227 回答
0

例如你有你的数据:

data <- data.frame ("x" = "a", "y" = 1000)
data$x <- as.character (data$x)
data
  x    y
1 a 1000

并且您想通过循环附加带有新值的新行

for (i in 1:3) {  
  data <- rbind (data, c (paste0 ("Obs_",i), 10^i))  
}

所以它会给你:

data
      x    y
1     a 1000
2 Obs_1   10
3 Obs_2  100
4 Obs_3 1000

你只需要关心你引入新值的顺序c()

于 2014-04-03T13:41:43.370 回答