2015-04-22 82 views
0

我正在写一个R函数。我希望它能够拍摄电影列表,下载关于它们的信息,然后将其放入数据框中。 到目前为止,我如何完成这个R功能的电影报废?

rottenrate <- function(movie){ 
    link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json&tomatoes=true", sep = "") 
    jsonData <- fromJSON(link) 
    return(jsonData) 
} 

这将返回信息为一部电影,并不会转化为data.frame。

感谢您的任何帮助。

+0

那么你所期望的列做您的数据帧?您能否提供样本电影ID并显示该输入的所需输出? – MrFlick

回答

1

你可以做这样的:

# First, vectorize function 
rottenrate <- function(movie){ 
    require(RJSONIO) 
    link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json&tomatoes=true", sep = "") 
    jsonData <- fromJSON(link) 
    return(jsonData) 
} 
vrottenrate <- Vectorize(rottenrate, "movie", SIMPLIFY = FALSE) 

# Now, query and combine 
movies <- c("inception", "toy story") 
df <- do.call(rbind, lapply(vrottenrate(movies), function(x) as.data.frame(t(x), stringsAsFactors = FALSE))) 
dplyr::glimpse(df) 
# Observations: 2 
# Variables: 
# $ Title    (chr) "Inception", "Toy Story" 
# $ Year    (chr) "2010", "1995" 
# $ Rated    (chr) "PG-13", "G" 
# $ Released   (chr) "16 Jul 2010", "22 Nov 1995" 
# $ Runtime   (chr) "148 min", "81 min" 
# $ Genre    (chr) "Action, Mystery, Sci-Fi", "Animation, 
# ... 

有趣数据库顺便说一句... :-)

+0

感谢您的帮助 - 我真的想学习R! Vectorize函数在这种情况下做了什么? 这是如何,我不必做玩具+故事(填写网址)? 对此处发生的任何其他解释将会非常有帮助! –

+0

它矢量化你的功能,参见'Vectorize'或http://www.noamross.net/blog/2014/4/16/vectorization-in-r--why.html和http://www.burns-stat .COM /页/导师/ R_inferno.pdf。为什么玩具+故事? – lukeA

+0

所以我去了维基百科,并把Nic Cage的所有电影都刮起来,然后放在一起,像你做的电影一样。然后我做了df函数,但用NicCage.Titles替换了moives:df < - do.call(rbind,lapply(vrottenrate(NicCage.Titles),function(x)as.data.frame(t(x),stringsAsFactors = FALSE ))) 但在rbind(deparse.level,...)中得到错误: 参数列数不匹配 –