Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R &引用;“尺寸编号不正确”;在分割数据帧以运行循环之后_R_Loops_Split - Fatal编程技术网

R &引用;“尺寸编号不正确”;在分割数据帧以运行循环之后

R &引用;“尺寸编号不正确”;在分割数据帧以运行循环之后,r,loops,split,R,Loops,Split,几个小时以来我一直在用一个脚本,我无法解决这个问题。我的目标是:我有143个样方(样方中包含40到50个观测值)的巨大坐标和高程数据集。我想提取每个样方的平均坡度和坡向。我知道如何从地理信息系统的角度出发,我的脚本在整个情节中运行完美 我首先将数据集拆分为143个数据帧。然后我为每个样方运行一个循环,我总是得到相同的错误消息:“拆分中的错误[I,2:3]:维数不正确”。问题当然来自于我编写循环的方式或使用“[]”“[[]”的方式 有人知道问题出在哪里吗? 非常感谢 data = read.tab

几个小时以来我一直在用一个脚本,我无法解决这个问题。我的目标是:我有143个样方(样方中包含40到50个观测值)的巨大坐标和高程数据集。我想提取每个样方的平均坡度和坡向。我知道如何从地理信息系统的角度出发,我的脚本在整个情节中运行完美

我首先将数据集拆分为143个数据帧。然后我为每个样方运行一个循环,我总是得到相同的错误消息:“拆分中的错误[I,2:3]:维数不正确”。问题当然来自于我编写循环的方式或使用“[]”“[[]”的方式

有人知道问题出在哪里吗? 非常感谢

data = read.table("Coordinates_elevation.txt", sep = "\t")
quad = data[,1]
X = data[,2]
Y = data[,3]
Z = data[,4]

results = as.data.frame(matrix(nrow = length(split), ncol = 3))
row.names(results) = names(split)
colnames(results) <- c('Elevation', 'Slope', 'Aspect')

data = matrix(c(quad,X,Y,Z),  ncol=4,  byrow=FALSE)
data=as.data.frame(data)
e = extent(data[,2:3])
r=raster(e, ncol=33, nrow=6, crs = CRS("+init=epsg:31300"))

split = split(data, quad)

for (i in 1:length(split)){
  x = rasterize(split[i,2:3], r, split[i,4], fun=mean)
  slope_asp=terrain(x, opt=c('slope', 'aspect'), unit='degrees',neighbors=8)
  slope = slope_asp$slope[[i]]
  results[i,2] = slope
  aspect=slope_asp$aspect[[i]]
  results[i,3] = aspect
  elevation = split[i,4]
  results[i,1]=elevation
}

没有一些数据很难说,但是如果运行
dim(split)
,它会说什么呢?在for循环中,
length(split)
将为您提供列数,如果split是一个数据帧,我怀疑您希望循环行数?如果是这样,请尝试
nrow()。长度(分割)给出143,这是我的样方数。nrow(data)给我9243,这是我的观察总数,nrow(split$
1
)给我53,这是我在第一个样方中的观察数…好的,那么问题是split是一个列表,所以你的语法是关闭的。如果我正确地假设,当您编写
split[I,2:3]
时,您需要的是
I
th样方的第二列和第三列,那么语法将是
split[[I]][,2:3]
,这将返回
I'
th样方中第二列和第三列的所有观察结果。它不起作用的原因是,目前您正在按行和列对一个没有这些维度的对象进行子集设置(因此
dim(split)
为空)。没有一些数据很难判断,但是如果运行
dim(split)
,它会说什么?在for循环中,
length(split)
将为您提供列数,如果split是一个数据帧,我怀疑您希望循环行数?如果是这样,请尝试
nrow()。长度(分割)给出143,这是我的样方数。nrow(data)给我9243,这是我的观察总数,nrow(split$
1
)给我53,这是我在第一个样方中的观察数…好的,那么问题是split是一个列表,所以你的语法是关闭的。如果我正确地假设,当您编写
split[I,2:3]
时,您需要的是
I
th样方的第二列和第三列,那么语法将是
split[[I]][,2:3]
,这将返回
I'
th样方中第二列和第三列的所有观察结果。它不起作用的原因是,目前您正在按行和列子集一个没有这些维度的对象(因此
dim(split)
为空)。
write.table(results, "results_slopeaspect.txt", sep = "\t")