La función R no devuelve valores
function movie (3)
Para devolver
df
, simplemente escriba
return(df)
:
IMDBmovierating <- function(movie){
link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json", sep = "")
jsonData <- fromJSON(link)
df <- data.frame(jsonData)
return(df)
}
o, incluso más simple en este caso, omita la última asignación:
IMDBmovierating <- function(movie){
link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json", sep = "")
jsonData <- fromJSON(link)
data.frame(jsonData)
}
Si la última expresión se evalúa como un objeto de resultado, como lo hace
data.frame(..)
, esto obtiene el objeto de retorno de la expresión que lo encierra y la declaración de
return
explícita puede omitirse.
editar: y eliminar los ticks anteriores antes de
sep
y después de cerrar el paréntesis
edit2: Por supuesto, el comentario de MrFlick es correcto: lo único que realmente está mal con su código son los ticks de retroceso que probablemente son simplemente un error tipográfico aquí en el sitio. Incluso la asignación produce el valor asignado como un objeto de resultado, pero es invisible. Por lo tanto, puede asignarlo, pero no se imprime automáticamente en la consola.
Estoy escribiendo mi primera función R.
IMDBmovierating <- function(movie){
link <- paste("http://www.omdbapi.com/?t=", movie, "&y=&plot=short&r=json", `sep = "")`
jsonData <- fromJSON(link)
df <- data.frame(jsonData)
}
Y entonces no pasa nada. Sospeche que tiene algo que ver con el retorno que se necesita. No estoy seguro de cómo escribiría esto.
Parece que acabas de tener algunos errores tipográficos.
Prueba esto y no olvides incluir tu biblioteca para ayudar a las personas cuando te respondan. :)
library(RJSONIO)
IMDBmovierating <- function(movie){
link <- paste("http://www.omdbapi.com/?t=", movie,"&y=&plot=short&r=json", sep = "")
jsonData <- fromJSON(link)
df <- data.frame(jsonData)
}
test <- IMDBmovierating(1984)
test
Simplemente necesita evaluar el objeto al final de su función para que devuelva un valor. Vea el ejemplo simple a continuación:
funA <- function(x) {
a <- x
}
funB <- function(x) {
b <- x
b
}
funA(1) # prints nothing
funB(1) # prints ''b''
[1] 1
EDITAR:
Como señala @MrFlick, tanto
funA
como
funB
devuelven la evaluación de la última expresión, pero
funA
no imprimirá nada.
Sin embargo, si asigna la salida de
funA(1)
un objeto, ese objeto producirá el valor
1
:
z <- funA(1)
z
[1] 1
z == funB(1)
[1] TRUE
La moraleja de la historia es que debes asignar la salida de
IMDBmovierating
a un objeto o evaluar explícitamente
df
al final de la función.