num_only <- function(df) {
for (clm in seq_along(df)) {
num_cols <- vector("logical", length = ncol(df))
num_cols[[clm]] <-ifelse(length(grep('[aA-zZ]', df[[clm]])) == 0, TRUE,
FALSE)
}
return(num_cols)
}
上述函数应该返回一个逻辑向量,告诉我数据框中的列是否只有数字字符 . 但是,当我为第一列(甚至是前两列)运行它时,它似乎返回一个不正确的值 .
mydf <- data.frame(new = letters[11:20],
a = rnorm(10),
b = letters[1:10],
c = LETTERS[1:10],
d = rnorm(10))
当我输入上面的df时,它应该返回一个FALSE TRUE FALSE FALSE TRUE的逻辑向量,但是我得到了这个:
num_only(mydf)
[1] FALSE FALSE FALSE FALSE TRUE
我不确定是什么问题 . 有人可以帮忙吗?
1 回答
您不希望
ifelse
,因为您一次只测试一个逻辑值 . 并且应该在for
循环之外创建返回向量 .此外,还有一个更简单的
R-ish
解决方案,它不是等效的,但可以确定列是否属于numeric
类 . 也许你是有意思的 .