使用for语句比较R中数据帧中的绘图
我试图比较并绘制一个变量的分布与该变量的对数变换的分布 下面我要说的是,对于mtcars中的每个变量,如果它是数字或整数,则返回它的直方图,然后返回带有对数变换的直方图,以便进行比较 任何帮助都将不胜感激使用for语句比较R中数据帧中的绘图,r,for-loop,plot,R,For Loop,Plot,我试图比较并绘制一个变量的分布与该变量的对数变换的分布 下面我要说的是,对于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
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
您应该使用函数
is.numeric
和is.integer
。在if语句中使用as.
毫无意义
这将是正确的方法:
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))
}
}
您应该使用函数
is.numeric
和is.integer
。在if语句中使用as.
毫无意义
这将是正确的方法:
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))
}
}
这与
hist()
无关,只有if
语句没有多大意义
- 您想使用
和is.numeric()
is.integer()
- 两者都需要参数
和为.numeric(mtcars[,i])
是.integer(mtcars[,i])
和is.numeric()
已返回一个is.integer()
,因此无需检查布尔值
==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)})
这与
hist()
无关,只有if
语句没有多大意义
- 您想使用
和is.numeric()
is.integer()
- 两者都需要参数
和为.numeric(mtcars[,i])
是.integer(mtcars[,i])
和is.numeric()
已返回一个is.integer()
,因此无需检查布尔值
==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)})
您没有将任何参数传递给
as.numeric
函数您没有将任何参数传递给as.numeric
函数谢谢GGamba。我将使用此函数处理类似的请求。使用application语句时唯一缺少的是直方图的名称。因此,将转换后的变量与其原始形式进行比较和对比有点粗糙。没错,我们修改并使用:sappy(名称(mtcars),函数(x){hist(log(mtcars[,x])+1,xlab=x);hist(mtcars[,x],xlab=x)
。注意使用sapply
而不是apply
谢谢GGamba。我将使用此函数处理类似的请求。使用application语句时唯一缺少的是直方图的名称。因此,将转换后的变量与其原始形式进行比较和对比有点粗糙。没错,我们修改并使用:sappy(名称(mtcars),函数(x){hist(log(mtcars[,x])+1,xlab=x);hist(mtcars[,x],xlab=x)
。注意使用sapply
代替apply