我有一个数据框<div class="modal fade" id=editUserPopUp tabindex="-1"
role="dialog" aria-labelledby="helpModalLabel" aria-hidden="true">
<div class="modal-dialog ">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">Update Password</h4>
</div>
<div class="modal-body">
<form class="EditUserBody" role="form" id="usermanagement_editUser="novalidate" method="POST">
<div class="input-group col-md-8">
<span class="input-group-addon">User Name</span>
<input class="form-control" id="userName" type="text" class="input-medium" disabled />
</div>
</form>
</div>
</div>
</div>
</div>
,我试图用for循环绘制。我在函数中使用forloop绘制ggplots的原因是因为我想多次调用此函数。
dat
我继续收到错误:
eval中的错误(as.symbol(x_val)): 评估论证时的错误&#39; expr&#39;选择函数的方法&#39; eval&#39;:as.symbol(x_val)中的错误:object&#39; x_val&#39;找不到
当我尝试调用这样的函数时:
> head(dat)
tpl motif strand base score ipdRatio
1: 24501 AAGTACTCG 0 A 51 3.108
2: 58809 GAGTACTAC 0 A 69 4.095
3: 65614 TAGTACTCA 0 A 61 3.341
4: 78494 GAGTACTAC 0 A 92 4.968
5: 92127 AAGTACTTA 0 A 23 1.702
6: 193102 GAGTACTCG 0 A 96 5.255
有关可能导致错误的原因的任何建议吗?
答案 0 :(得分:1)
我能够找到解决方案,我只需使用aes_string
代替aes
来调用变量aes列值。
像这样:
plotme <- function(dataf,x_val,bin_width){
print(ggplot(dataf, aes_string(x = x_val)) +
geom_histogram(binwidth = bin_width))
}
ratioplot <- plotme(dat,"ipdRatio",15)
答案 1 :(得分:0)
首先,我更喜欢aes()
而不是aes_string
,然后只需要
if (is.character(x_val)) {x_val <- which(names(dataf) == x_val)}
这样,您可以在引用列时将其称为数字或字符。
其次,你所做的功能有问题。
尝试完全清除你的工作,并运行这个:
dat <- data.frame(ipdRatio=rnorm(100));library(ggplot2)
plotme <- function(dataf,x_val,bin_width){
localEnv <- environment()
if (is.character(x_val)) {x_val <- which(names(dataf) == x_val)}
print(ggplot(dataf, aes(x = dataf[,x_val])) +
geom_histogram(binwidth = bin_width))
}
ratioplot <- plotme(dataf=dat,"ipdRatio",.5)
将返回
Error in eval(expr, envir, enclos) : object 'dataf' not found
函数调用dataf = dat根本没有制作,现在它适用于你的原因是因为你的全局环境中有dataf。
更改功能以将环境指定为本地
dat <- data.frame(ipdRatio=rnorm(100));
plotme <- function(dataf,x_val,bin_width){
localEnv <- environment()
if (is.character(x_val)) {x_val <- which(names(dataf) == x_val)}
print(ggplot(dataf, aes(x = dataf[,x_val]),environment=localEnv) +
geom_histogram(binwidth = bin_width))
}
ratioplot <- plotme(dataf=dat,"ipdRatio",.5)