freesui1984
我有两个数据框A和B,两个数据框的列数相同,行数不同,想对数据框A中的每一行样本计算它与B中每一行样本的欧式距离,写了如下代码:
cal_dist<-function(x)
{
x<-rbind(x,B)
dist(x)
}
apply(A,1,cal_dist)
计算很慢,最后报错,说分配不了4.3MB的向量,这段代码的逻辑有问题吗?
freesui1984
从网上找了一个,好用,但是没看懂,请大神解释下:
first <- rnorm(3)
second <- rnorm(3)
third <- rnorm (3)
MainNumbers = data.frame(first,second,third)
Operator1= rnorm(50)
Operator2= rnorm(50)
Operator3=rnorm(50)
MainOperator= data.frame(Operator1,Operator2,Operator3)
apply(MainOperator,1,function(MainOperator) (apply(MainNumbers,1,function(MainNumbers,MainOperator)dist(rbind(MainNumbers,MainOperator)),MainOperator)))
apply函数的第一个参数是一个数据框,对该数据框的每一行(设为i)使用函数function(MainOperator)处理,该函数又对MainNumbers数据框的每一行(设为j)使用函数function(MainNumbers,MainOperator),这个函数取MainNumbers的第i行和MainOperator的第j行,先做合并处理,然后计算欧氏距离。问题:如果去掉rbind后面的MainOperator,会报错,为什么?这个参数是什么意义?还有一个问题是:这样算完后得到是3*50的矩阵,为什么呢?感觉应该是50*3的矩阵。
谢谢大家!