为导入光栅文件的循环中的子字符串分配名称

Assign name to a substring in a loop importing raster files

我正在循环将一些光栅文件从 PostgreSQL 连接导入到 R 中。我想将我新获得的栅格自动分配给一个变量,该变量的名称来源于这样的输入变量:substring(crop, 12)

crop <- "efsa_capri_barley"
ras <- readGDAL(sprintf("PG:dbname='' host='' port='' user='' schema='' table='%s' mode=2", crop))
paste0(substring(crop, 12)) <- raster(ras, 1)

我必须使用什么函数才能让 R 将 substring() 的结果识别为字符串而不是函数本身?我在考虑 paste() 但它不起作用。 可能已经有人问过这个问题,但我找不到合适的答案。

如果我正确理解你的问题,你正在寻找类似 assign 的内容。例如你可以试试这个:

assign(substring(crop, 12), raster(ras, 1))

要了解 assign 的工作原理,您可以查看此代码:

x <- 2
# x is now 2

var_to_assign <- "x"
assign(var_to_assign, 3)
# x is now set to 3
x
# 3

这给了你想要的吗?

根据您的描述,assign在技术上是正确的,但推荐它是错误的建议。

如果您在循环中拉入多个栅格,R 中的最佳做法是初始化一个列表以保存 所有 结果栅格并相应地命名每个列表元素。你可以一次做一个:

# n is number of rasters
raster_list <- vector("list",n)

for (i in seq_len(n)){
  ...
  #crop[i] is the ith crop name
  raster_list[[substring(crop[i],12)]] <- raster(...)
}

您还可以通过setNames一次设置列表中每个元素的名称。但是你应该不惜一切代价尽量避免使用 assign