使用R中的不同名称保存循环中生成的栅格名称

时间:2015-11-15 18:37:13

标签: r loops raster

我正在尝试创建5个光栅文件,并使用单独的名称编写每个光栅文件。到目前为止,我已成功实现了这一目标:

c=5
for (i in 1:c){
z<-RFsimulate(x=x,y=y,grid=TRUE,model = model,maxGB=4.0)
a<-raster(z)
projection(a) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
writeRaster(raster(a),filename="raster[i].tif")
} 

但我在工作目录中只找到一个光栅文件(光栅1)。我以为我会有五个光栅文件名称raster1,raster2 ..... raster5。任何人都可以帮我解决我的代码有什么问题吗?

由于

2 个答案:

答案 0 :(得分:2)

这是一个非常基本的R问题。你应该用简单的循环练习一下。使用a语句查看发生了什么。请注意,您创建对象"raster[i].tif"但不使用它。 i是一个字符串,它与迭代器n <- 5 for (i in 1:n){ z <- RFsimulate(x=x,y=y,grid=TRUE,model = model,maxGB=4.0) a <- raster(z, crs="+proj=longlat +datum=WGS84") f <- paste0('raster', i, '.tif') writeRaster(a, filename=f) } 无关。这是一个解决方案:

domain

答案 1 :(得分:2)

R没有自动字符串插值。如果您想将filename的值放入 ... projection(a) <- ... filename <- gsub("INDEX", i, "raster_INDEX.tif") writeRaster(raster(z), filename=filename } 字符串中,则需要明确替换它。相反,试试这个:

gsub

此代码使用"INDEX"函数将值i替换为传递的字符串paste,并返回修改后的字符串。

您也可以使用 filename <- paste("raster_", i, ".tif", sep="")

构建文件名
final ParseUser currentUser = ParseUser.getCurrentUser();
final String userName = ParseUser.getCurrentUser().getUsername();

ParseUser.logInInBackground(userName, oldPass, new LogInCallback() {
   @Override
   public void done(ParseUser user, ParseException e) {
         if (user != null) {
            if (et.length() < 6)
              Toast(getActivity(), "Password is short, Min char 6", Toast.LENGTH_LONG).show();
            else {
                currentUser.setPassword(newPass);
                currentUser.saveInBackground();
                ParseUser.logOut();
                ParseUser.logInInBackground(userName, newPass, new LogInCallback() {
                @Override
                public void done(ParseUser parseUser, ParseException e) {
                    if (e == null) {
                    Toast(getActivity(), "Password change", Toast.LENGTH_LONG).show();
                     } else
             Toast(getActivity(), "Network Error", Toast.LENGTH_LONG).show();
                                        }
                                    });
                                }
                            } else {
                                new CustomToast(getActivity(), "Old Password is incorrect", Toast.LENGTH_LONG);
                            }
                        }
                    });