为导入光栅文件的循环中的子字符串分配名称
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
。
我正在循环将一些光栅文件从 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
。