无法遍历R中的数据帧行索引

时间:2018-09-20 02:01:16

标签: r

我在R中有一个数据帧,大小为nx4。我试图遍历它并执行计算以添加到“距离”向量。 x0是长度为3的向量。我尝试运行以下代码

trainData = data.frame(x1,x2,x3,y)

for (j in 1:n) {
    distances[j] = sqrt(sum((x0 - trainData[j,1:3])^2))
}

我收到以下错误:

Error in Ops.data.frame(x0, trainData[j, 1:3]) : 
  ‘-’ only defined for equally-sized data frames

但是,两个值相减的长度是相同的,因此我可以不循环运行它,即

sqrt(sum((x0 - trainData[1,1:3])^2))

我找不到原因,我们将为您提供帮助。

2 个答案:

答案 0 :(得分:0)

您要使用dist()函数来计算距离。另外,请避免使用循环,而应关注apply函数家族。

library(dplyr)

set.seed(1724)
trainData <- data.frame(x1 = runif(4, 1, 10), x2 = runif(4, 1, 10), x3 = runif(4, 1, 10), y = runif(4, 1, 10))

mutate(trainData,
       dist = apply(trainData,
                    1,
                    function(x, y = runif(3, 1, 10)) {
                      dist(rbind(x[1:3], y), method = "euclidean")
                    }))

#         x1       x2       x3        y      dist
# 1 5.890667 7.156956 6.946917 6.580706  6.188533
# 2 3.060810 1.117295 7.676836 7.965404  5.193822
# 3 8.058110 5.518819 2.687567 3.832825 10.520283
# 4 8.405847 1.326119 3.533277 6.804517  8.390918

答案 1 :(得分:0)

我不确定最初的问题是什么,但是通过听取Paul的建议并将循环替换为:

  distances = apply(trainData, 1, function(x) dist(rbind(x0,x)))