[英]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.numeric
和is.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.