r - 来自 Argo 的温度和盐度数据,但出现错误 $ 运算符对原子向量无效
问题描述
我正在尝试从 Argovis 网站“ https://argovis.colorado.edu/selection/profiles/ ”中提取温度和盐度数据,以对渔获量进行建模分析。我使用了“ https://www.itsonlyamodel.us/argovis-r-api.html ”中的代码,专门用于提取不同海洋深度剖面的温度和盐度。
library(httr)
options(warn=-1)
get.profile <- function(profileName){
baseURL <- "https://argovis.colorado.edu/catalog/profiles/"
url <- paste(baseURL, profileName, sep="")
resp <- GET(url)
if(resp$status_code==200) {
profile = content(resp, "parsed")
}
else {
profile = profile = content(resp, "raw")
}
return(profile)
}
parse.into.df <- function(profile) {
paramNames <- names(profile)
meas <- profile$measurements
names = unique(names(unlist(meas)))
df <- data.frame(matrix(unlist(meas), nrow=length(meas), byrow=T))
colnames(df) <- names
df$profile_id <- profile$`_id`
df$date <- profile$date
df$cycle_number <- profile$cycle_number
df$lat <- profile$lat
df$lon <- profile$lon
return (df)
}
profileName = "3900737_279"
profile = get.profile(profileName)
df = parse.into.df(profile)
head(df)
get.platform <- function(platformNumber){
baseURL <- "https://argovis.colorado.edu/catalog/platforms/"
url <- paste(baseURL, platformNumber, sep="")
resp <- GET(url)
if(resp$status_code==200) {
profiles <- content(resp, "parsed")
}
else {
profiles = content(resp, "raw")
}
return(profiles)
}
platformNumber <- '3900737'
platformProfiles <- get.platform(platformNumber)
platformDf <- data.frame()
for (profile in platformProfiles)
{
df <- parse.into.df(profile)
platformDf <- rbind(platformDf, df)
}
tail(platformDf)
get.selection <- function(startDate, endDate, shape, presRange){
baseURL <- "https://argovis.colorado.edu/selection/profiles/"
startDateQuery <- paste('?startDate=', startDate, sep="")
endDateQuery <- paste('&endDate;=', endDate, sep="")
shapeQuery <- paste('&shape;=', shape, sep="")
if(missing(presRange)) {
url <- paste(baseURL, startDateQuery, endDateQuery, shapeQuery, sep="")
}
else {
presRangeQuery = paste('&presRange;=', presRange, sep="")
url <- paste(baseURL, startDateQuery, endDateQuery, presRangeQuery, shapeQuery, sep="")
}
resp <- GET(url)
if(resp$status_code==200) {
profiles <- content(resp, "parsed")
}
else {
profiles <- content(resp, "raw")
}
return(profiles)
}
startDate='2017-9-15'
endDate='2017-10-31'
shape = '[[[-18.6,31.7],[-18.6,37.7],[-5.9,37.7],[-5.9,31.7],[-18.6,31.7]]]'
presRange='[0,30]'
selectionProfiles = get.selection(startDate, endDate, shape, presRange)
selectionDf <- data.frame()
for (profile in selectionProfiles)
{
df <- parse.into.df(profile)
selectionDf <- rbind(selectionDf, df)
}
但是当我到达最后一步时我得到的是:
错误:$ 运算符对原子向量无效
请你帮助我好吗
解决方案
您的问题来自第 22 行:
df$profile_id <- profile$`_id`
应该是:
df$profile_id <- profile$_id
也许这个修复不起作用,因为我真的不知道profiles
对象包含什么。
但是您的问题源于尝试使用 $ 调用作为参考的原子向量( vector with length = 1
)"_id"
。
推荐阅读
- javascript - 在 Javascript 中修改此关键字
- wpf - OxyPlot WPF 工具提示和十字线颜色
- html - html/css 页面在移动版中未以全尺寸显示
- java - 在带有条件的for循环之后将整数保存到向量中
- java - 如何在子类中公开受保护的静态字段?
- android - 我的应用无法安装在 Android 11 上,但可以在旧版本中使用
- azure-devops - NODE JS 应用的应用服务部署失败并出现 web.config 错误
- heroku - 使用带有 react-rails gem 的组件时没有这样的文件或目录@rb_sysopen
- java - Magic Cup 中使用的通用方法和实现
- android - 致命异常:java.lang.UnsatisfiedLinkError lopen 失败:库名称“/data/packagename/lib/arm64/libmobileffmpeg_abidetect.so”太长