繁体   English   中英

使用for语句比较R中数据框中的图

[英]Using for statement to compare plots in a dataframe in R

我正在尝试比较变量的分布和变量的对数转换的分布。

我在下面说的是,对于mtcars中的每个变量,如果它是数字或整数,则返回它的直方图,然后通过对数转换返回直方图,以便进行比较。

任何帮助,将不胜感激。

for(i in ncol(mtcars)){
   par(mfcol = c(1,2))
   if (as.numeric | as.integer(mtcars[,i]) == T){
      return(hist(mtcars[,i]))}
   if (as.numeric | as.integer(mtcars[,i]) == T){
      return(hist(log(mtcars[,i])+1))}
}

Error in as.numeric | as.integer(mtcars[, i]) == T : 
operations are possible only for numeric, logical or complex types

这与hist()无关,这是if语句,没有多大意义。

  • 您要使用is.numeric()is.integer()
  • 两者都需要参数is.numeric(mtcars[,i])is.integer(mtcars[,i])
  • is.numeric()is.integer()已经返回boolean ,因此无需检查== T

您的代码应为:

for(i in ncol(mtcars)){
  if (is.numeric(mtcars[,i]) | is.integer(mtcars[,i])){
    return(hist(mtcars[,i]))
    return(hist(log(mtcars[,i])+1)}
}

您还应该知道,利用apply函数系列而不是循环通常总是更好,例如:

apply(mtcars, 2, function(x) {hist(log(x)+1); hist(x)})

您应该使用函数is.numericis.integer 使用as. if语句中没有任何意义。

这将是正确的方法:

for(i in ncol(mtcars)){
    par(mfcol = c(1,2))
    if (is.numeric(mtcars[,i] | is.integer(mtcars[,i])){
       return(hist(mtcars[,i]))
    }
    else {
       return(hist(log(mtcars[,i])+1))
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM