在下面的代码中,数据框offshore_Sites已经存在并包含大约1000条记录。我正在构建一个函数,所以我可以将它重用于我拥有的所有其他数据帧。
数据框是从SQL Server获得的。目前我只有一个离岸的一个,但其他的将以同样的方式生产。
这个想法是调用这个函数,里面有一个switch语句,根据数据帧,我将执行不同的转换。对于offshore_Sites,我需要连接一些字段,如示例所示。
myStringConn <- "Driver=SQL Server;Server=SQL-SPATIAL;Database=AreasProt;Trusted_Connection=True;"
conn <- odbcDriverConnect(myStringConn)
offshore_Sites <- sqlQuery(conn, "select * from Offshore_Sites")
formatDataFrame <- function(dataframe) {
switch(dataframe, "offshore_Sites" = {
offshore_sites <- as.data.table(offshore_Sites)
offshore_sites <- setnames(offshore_sites, 1:6, c("status","country","region","area","long","lat"))
offshore_sites <- unique(offshore_sites[, list(status,
country = paste(sort(unique(country)), collapse = ' & '),
region = paste(sort(unique(region)), collapse = ' & '),
area,
long,
lat), by = code])
})
}
formatDataFrame(offshore_Sites)
然而,当我运行它时,我收到错误:
开关出错(dataframe,offshore_Sites = {:
EXPR必须是长度为1的向量
有谁知道发生了什么?
答案 0 :(得分:0)
今天我有了一些灵感,我发现了问题所在。该函数需要两个变量,即数据帧名称和数据帧本身。
myStringConn <- "Driver=SQL Server;Server=SQL-SPATIAL;Database=AreasProt;Trusted_Connection=True;"
conn <- odbcDriverConnect(myStringConn)
offshore_Sites <- sqlQuery(conn, "select * from Offshore_Sites")
formatDataFrame <- function(dataframe, dataframeName) {
switch(dataframeName, "offshore_Sites" = {
offshore_sites <- as.data.table(dataframe)
offshore_sites <- setnames(offshore_sites, 1:6, c("status","country","region","area","long","lat"))
offshore_sites <- unique(offshore_sites[, list(status,
country = paste(sort(unique(country)), collapse = ' & '),
region = paste(sort(unique(region)), collapse = ' & '),
area,
long,
lat), by = code])
})
}
formatDataFrame(offshore_Sites, "Offshore_Sites")
感谢所有评论:)