【发布时间】:2018-08-06 00:45:15
【问题描述】:
我正在通过使用 apply 对数据帧的行应用素数函数来查找索引数据帧。给定的输出应该保留具有任何或所有数字作为素数的行。示例数据框名称 c4:
c1 c2 c3
1 8 2 6
2 9 5 4
3 10 4 5
4 7 1 8
5 3 1 2
6 7 5 9
7 5 1 4
8 2 1 3
9 7 2 4
10 10 4 8
给定的输出应该是
c1 c2 c3
1 8 2 6
2 9 5 4
3 10 4 5
4 7 1 8
5 3 1 2
6 7 5 9
7 5 1 4
8 2 1 3
9 7 2 4
删除第十行。 我用于素数的代码是
prime.function<-
function (x){
if(x == 2){
return(TURE)
} else if (any(x %% 2: (x - 1) == 0)){
return(FALSE)
}else{
return(TRUE)
}
}
我在基础索引的应用函数中使用以下函数:
c4[apply(c4, MARGIN = 1, FUN = function(x) any(prime.function(x))),]
但不幸的是,代码抛出错误。
我很想听听有关代码的任何建议。希望我在解释方面很清楚。
【问题讨论】:
-
首先,
prime.function是检查x是否为素数的一种非常效率低下的方法。例如,检查直到sqrt(x)而不是x-1的数字就足够了。其次,您声明“代码抛出错误”;产生了什么错误?例如,此刻prime.function有一个错字(TURE而不是TRUE);还有其他错误吗?在我看来,您想检查行号是否为素数。如果是这样,为什么要遍历整个data.frame?除非我理解错了,df[sapply(1:nrow(df), prime.function), ]应该足够了。