tab <- function (x){ #这是我自己定义的一个函数,用来返回一个数组中小于1000的数据的个数是否大于3个
if ((length(which(x<1000))-1)>3){
bool = TRUE
}
else {
bool = FALSE
}
return (bool)
}
调用如下:
test1 = test[which(apply(MatDistance,1,tab)==TRUE),] #Matdistance是一个矩阵,这个调用将返回矩阵中符合上述条件的所有行
那么问题来了,如果我想在自定义的函数中多加一个参数,那么后面的apply就不能用了。看遍apply家所有函数的介绍没能找到一个靠谱的,要么是R不够贴心就是不存在能调用两个参数的apply,要么就是我的理解不足,没能看明白,请各位大神指点迷津!
1 个解决方案
#1
找到了解决方法,放在这里供大家参看:
花了一个晚上时间研究了一下apply家族的各个函数,发现好几个可以对list进行操作的,比如:sapply
简介:Apply a Function over a List or Vector 对列表或者向量使用函数(sapply会对list中每个元素重复应用后面的参数,也就是说,每次调用FUN的时候,都会把list中对应的元素和需要重复使用的参数整合一下,一起扔给FUN,这就是添加参数的关键!)
用法:sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
于是我的问题就转为了,怎么把一个矩阵拆成一堆list,再扔进sapply里面让他跑起来。
所以要先建一个空的list:
mylist = list();
然后跑一个for的循环,每个循环中把当前的矩阵中的行跟前面留下的进行合并:
for (i in 1 : nrow(MatDistance)){
mylist = c(mylist,list(MatDistance[i,]))
}
最后把mylist扔进sapply里面:
test1 = data[which(sapply(mylist,tab,n = 4,distance=dis)),]
于是大功告成~!
花了一个晚上时间研究了一下apply家族的各个函数,发现好几个可以对list进行操作的,比如:sapply
简介:Apply a Function over a List or Vector 对列表或者向量使用函数(sapply会对list中每个元素重复应用后面的参数,也就是说,每次调用FUN的时候,都会把list中对应的元素和需要重复使用的参数整合一下,一起扔给FUN,这就是添加参数的关键!)
用法:sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
于是我的问题就转为了,怎么把一个矩阵拆成一堆list,再扔进sapply里面让他跑起来。
所以要先建一个空的list:
mylist = list();
然后跑一个for的循环,每个循环中把当前的矩阵中的行跟前面留下的进行合并:
for (i in 1 : nrow(MatDistance)){
mylist = c(mylist,list(MatDistance[i,]))
}
最后把mylist扔进sapply里面:
test1 = data[which(sapply(mylist,tab,n = 4,distance=dis)),]
于是大功告成~!
#1
找到了解决方法,放在这里供大家参看:
花了一个晚上时间研究了一下apply家族的各个函数,发现好几个可以对list进行操作的,比如:sapply
简介:Apply a Function over a List or Vector 对列表或者向量使用函数(sapply会对list中每个元素重复应用后面的参数,也就是说,每次调用FUN的时候,都会把list中对应的元素和需要重复使用的参数整合一下,一起扔给FUN,这就是添加参数的关键!)
用法:sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
于是我的问题就转为了,怎么把一个矩阵拆成一堆list,再扔进sapply里面让他跑起来。
所以要先建一个空的list:
mylist = list();
然后跑一个for的循环,每个循环中把当前的矩阵中的行跟前面留下的进行合并:
for (i in 1 : nrow(MatDistance)){
mylist = c(mylist,list(MatDistance[i,]))
}
最后把mylist扔进sapply里面:
test1 = data[which(sapply(mylist,tab,n = 4,distance=dis)),]
于是大功告成~!
花了一个晚上时间研究了一下apply家族的各个函数,发现好几个可以对list进行操作的,比如:sapply
简介:Apply a Function over a List or Vector 对列表或者向量使用函数(sapply会对list中每个元素重复应用后面的参数,也就是说,每次调用FUN的时候,都会把list中对应的元素和需要重复使用的参数整合一下,一起扔给FUN,这就是添加参数的关键!)
用法:sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
于是我的问题就转为了,怎么把一个矩阵拆成一堆list,再扔进sapply里面让他跑起来。
所以要先建一个空的list:
mylist = list();
然后跑一个for的循环,每个循环中把当前的矩阵中的行跟前面留下的进行合并:
for (i in 1 : nrow(MatDistance)){
mylist = c(mylist,list(MatDistance[i,]))
}
最后把mylist扔进sapply里面:
test1 = data[which(sapply(mylist,tab,n = 4,distance=dis)),]
于是大功告成~!