You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中计算数据集平均中心与标准距离并绘图的问题

问题

我有一个名为mypoints的数据集,已编写代码完成数据读取、多边形创建和点绘制,代码如下:

mypoints = read.csv("d:\\data\\venus.csv", header = T)
mypoints
minx = min(mypoints[,1])
maxx = max(mypoints[,1])
miny = min(mypoints[,2])
maxy = max(mypoints[,2])
mypolygon = cbind(c(minx, maxx, maxx, minx), c(miny, miny, maxy, maxy))
plot(mypoints)
polygon(mypolygon)

现在需要编写函数计算该数据集的平均中心与标准距离,并绘制以平均中心为圆心、标准距离为半径的圆。我尝试的代码如下:

# 计算x和y的平均中心
x1 = sum(mypoints[,1])/length(mypoints[,1])
y1 = sum(mypoints[,2])/length(mypoints[,2])

# 计算标准距离
sd.mypoints = sqrt(sum(x1+y1)/n)

# 绘制圆
symbols(sd.mypoints[1], sd.mypoints[2], sd.mypoints$sd, add=T, inches=F)

运行绘制圆的代码时出现错误:

Error in sd.mypoints$sd : $ operator is invalid for atomic vectors

我已完成该数据集的最近邻、KDE、Ghat和Fhat分析,但在此问题上卡壳,求解决方法。


解决方法

1. 修正平均中心计算(可简化)

平均中心的计算可以用mean()函数更简洁,结果和你手动求和的方式一致:

mean_x = mean(mypoints[,1])
mean_y = mean(mypoints[,2])

2. 修正标准距离公式

你使用的标准距离公式不符合空间统计的定义,正确的标准距离公式为:
$$SD = \sqrt{\frac{\sum_{i=1}^n (x_i - \bar{x})^2 + \sum_{i=1}^n (y_i - \bar{y})^2}{n}}$$
对应R代码:

n = nrow(mypoints)
sd_dist = sqrt( (sum( (mypoints[,1] - mean_x)^2 ) + sum( (mypoints[,2] - mean_y)^2 )) / n )

3. 修正绘制圆的代码

symbols()函数的参数格式错误,之前的sd.mypoints是单个数值(原子向量),无法使用$操作符和索引。正确用法是传入圆心坐标和半径:

# 先执行你的原始绘图代码
plot(mypoints)
polygon(mypolygon)
# 标记平均中心(可选)
points(mean_x, mean_y, pch = 19, col = "red")
# 绘制标准距离圆
symbols(mean_x, mean_y, circles = sd_dist, add = TRUE, inches = FALSE, col = "blue", lwd = 2)

4. 封装成可复用函数

把所有逻辑封装成函数,方便后续调用:

calculate_and_plot_center_sd <- function(data) {
  # 计算边界多边形
  minx = min(data[,1])
  maxx = max(data[,1])
  miny = min(data[,2])
  maxy = max(data[,2])
  mypolygon = cbind(c(minx, maxx, maxx, minx), c(miny, miny, maxy, maxy))
  
  # 绘制原始点和多边形
  plot(data, main = "平均中心与标准距离圆")
  polygon(mypolygon, border = "gray")
  
  # 计算平均中心
  mean_x = mean(data[,1])
  mean_y = mean(data[,2])
  
  # 计算标准距离
  n = nrow(data)
  sd_dist = sqrt( (sum( (data[,1] - mean_x)^2 ) + sum( (data[,2] - mean_y)^2 )) / n )
  
  # 添加平均中心标记和圆
  points(mean_x, mean_y, pch = 19, col = "red")
  symbols(mean_x, mean_y, circles = sd_dist, add = TRUE, inches = FALSE, col = "blue", lwd = 2)
  
  # 返回计算结果
  return(list(mean_center = c(x = mean_x, y = mean_y), standard_distance = sd_dist))
}

# 调用函数
result = calculate_and_plot_center_sd(mypoints)
# 查看结果
print(result$mean_center)
print(result$standard_distance)

错误原因说明

  • 标准距离公式错误,导致sd.mypoints是单个原子向量,而非数据框,因此$sd操作符无效。
  • symbols()绘制圆时,未正确指定circles参数传递半径,误用了索引和$操作符。

内容的提问来源于stack exchange,提问作者SMC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:31:07