在数据帧上运行带有质数功能的Apply

时间:2018-08-06 00:45:16

标签: r dataframe apply

我正在通过使用 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) } }

并且我在基本索引的apply函数中使用以下函数:

c4[apply(c4, MARGIN = 1, FUN = function(x) any(prime.function(x))),]

但不幸的是,代码会引发错误。

我很想听听有关该代码的任何建议。希望我在解释方面很清楚。

1 个答案:

答案 0 :(得分:0)

使用此处提供的prim函数:Prime number function in R

is.prime <- function(n) n == 2L || all(n %% 2L:max(2,floor(sqrt(n))) != 0)

以下代码将完成这项工作:

# replicate your data frame
c4_check <- c4

# replace the items with booleans in the replicate
c4_check[] <- sapply(unlist(c4), is.prime)

# filter the original data frame using the replicate
c4[rowSums(c4_check) != 0, ]

更新

@Maurits Evers在评论中的回答要好得多:

c4[sapply(1:nrow(c4), is.prime), ]