为导入栅格文件的循环中的子字符串指定名称

时间:2016-06-27 14:01:12

标签: r raster rgdal

我正在将一些光栅文件从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()的结果识别为字符串而不是函数本身?我在考虑粘贴()但它不起作用。 可能这个问题已被提出,但我找不到合适的答案。

2 个答案:

答案 0 :(得分:5)

根据您的说明,app.directive('typeaheadFocus', function () { return { require: 'ngModel', link: function (scope, element, attr, ngModel) { //trigger the popup on 'click' because 'focus' //is also triggered after the item selection element.bind('click', function () { var viewValue = ngModel.$viewValue; //restore to null value so that the typeahead can detect a change if (ngModel.$viewValue == ' ') { ngModel.$setViewValue(null); } //force trigger the popup ngModel.$setViewValue(' '); //set the actual value in case there was already a value in the input ngModel.$setViewValue(viewValue || ' '); }); //compare function that treats the empty space as a match scope.emptyOrMatch = function (actual, expected) { if (expected == ' ') { return true; } return actual.indexOf(expected) > -1; }; } }; }); 在技术上是正确的,但推荐它是不好的建议。

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

assign

您还可以通过# 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

答案 1 :(得分:0)

如果我正确理解您的问题,您正在寻找类似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

这会给你你想要的吗?