выполнение нескольких запросов fromJSON (jsonlite)

Я новичок в R и не нашел ответов, которые мог бы понять.

Моя цель - получить информацию из URL-адреса, а затем преобразовать информацию в фрейм данных для использования.

install.packages("jsonlite")

library(jsonlite)

fromJSON("https://developers.onemap.sg/commonapi/search?searchVal=revenue&returnGeom=Y&getAddrDetails=Y&pageNum=1)") 
#it works

x1 <- as.character("https://developers.onemap.sg/commonapi/search?searchVal=revenue&returnGeom=Y&getAddrDetails=Y&pageNum=1)")

fromJSON(x1) #also works

fromJSON(paste("x",1,sep=""))

=> Error: lexical error: invalid char in json text.    

Где я ошибся? Я проверил, что paste("x",1,sep=="") эквивалентен "x1", так что не должно ли это работать?

В любом случае, я на самом деле планировал поместить список почтовых индексов во фрейм данных, чтобы заменить каждый searchVal=, чтобы сгенерировать список URL-адресов, получить фрейм данных для каждого URL-адреса, а затем объединить их все вместе. Но, учитывая трудности, с которыми я сталкиваюсь выше, я думаю, я попытаюсь сначала получить помощь от вышеперечисленного.

Заранее большое спасибо!


person ZJC    schedule 06.02.2018    source источник
comment
Просто создайте список URL-адресов, а затем используйте lapply для фреймов данных: json_list <- lapply(urls_list, function(i) fromJSON(i)$results. Нет необходимости в отдельных переменных.   -  person Parfait    schedule 06.02.2018


Ответы (2)


Я думаю, вы пытаетесь использовать строку в качестве переменной, в текущей настройке R знает x1, однако «x1» - это не что иное, как просто строка. Я надеюсь, что кто-то сможет объяснить лучше. Значит нужно использовать. оценка.

fromJSON(eval(parse(text=paste('x',1,sep=''))))
person Biranjan    schedule 06.02.2018
comment
Спасибо! это сработало. Я с нетерпением жду того, кто сможет объяснить лучше - я не вижу причины, по которой R может понять, что означает x1, но не может понять, что означает paste('x',1,sep=''). придется посмотреть, что делают ?parse и ?eval (тогда поймете), но если кто-то чувствует милосердие, вы можете помочь объяснить и это! - person ZJC; 06.02.2018
comment
Это относится и к другим языкам, например, в python есть собственный eval(). Что делает paste('x',1,sep=''), так это создает символ 'x1', который не равен переменной x1, по этой причине мы передаем символ в eval, который пытается оценить его как переменную[someone можете меня поправить, если я ошибаюсь]. Попробуйте прочитать документацию по функции eval(), надеюсь, это поможет. - person Biranjan; 06.02.2018

вы пытаетесь использовать строку как переменную. это совершенно разные типы данных.

см. здесь: https://www.statmethods.net/input/datatypes.html

строка является вектором символов, поэтому, когда вы делаете

paste("x",1,sep="")

вы получаете вектор символов "x1"

тогда как когда вы это сделаете (кстати, я исправил "и") для вас в конце)

x1 <- as.character("https://developers.onemap.sg/commonapi/search?searchVal=revenue&returnGeom=Y&getAddrDetails=Y&pageNum=1")

вы получаете переменную x1, которая содержит URL-адрес в виде строки. вы можете использовать его в другом месте.

другой пример:

region <- "10000032"
url <- paste("https://esi.tech.ccp.is/latest/markets/", region, "/orders/?order_type=sell&page=1", sep="")

должен предоставить вам переменный URL-адрес, который содержит вектор символов "https://esi.tech.ccp.is/latest/markets/10000032/orders/?order_type=sell&page=1"

то вы можете разобрать его из json в фрейм данных с помощью:

df <- fromJSON(url)
person drsh1    schedule 06.02.2018