【发布时间】:2015-07-16 18:01:55
【问题描述】:
我正在创建一个适合 glm 模型的新 Shiny 应用程序。但是公式接收到一些反应性输入,我不断收到错误:
未使用的参数 (x[1])
这就是代码在 Server.R 中的样子
form <- reactive({
as.formula(paste0('cbind(n,count) ~ ',paste0(apply(data.frame(V1=input$checkGroup,sapply(c('linear','quadratic','sine'), grepl, paste0('input$trans',gsub("\\.","",input$checkGroup)), ignore.case=TRUE)),
1,function(x)
ifelse(x[2]==F,
ifelse(x[3]==F,
ifelse(x[4]==F,paste0('I((',paste0('omega',gsub("\\.","",x[1]),'()[1]'),'*sin(',paste0('omega',gsub("\\.","",x[1]),'()[2]'),'*as.numeric(',gsub("\\.","",x[1]),')+',paste0('omega',gsub("\\.","",x[1]),'()[3]'),')+',paste0('omega',gsub("\\.","",x[1]),'()[4]'),'))'),
paste0('as.numeric(',x[1],')+I(as.numeric(',x[1],'))^2'),
x[1])))),collapse="+")))
})
这是一个假的例子来展示我正在尝试做的事情:
x <- data.frame(V1=c('day','hour','source','relevancy','tollfree','dist.mean','simi.mean'),sapply(c('linear','quadratic','sine'), grepl, c(rep('linear',5),rep('quadratic',1),rep('sine',1)), ignore.case=TRUE))
as.formula(paste0('cbind(n,count) ~ ',paste0(apply(x,1,
function(x)
ifelse(x[2]==F,
ifelse(x[3]==F,
ifelse(x[4]==F,x[1],paste0('I((',paste0('omega',gsub("\\.","",x[1]),'()[1]'),'*sin(',paste0('omega',gsub("\\.","",x[1]),'()[2]'),'*as.numeric(',x[1],')+',paste0('omega',gsub("\\.","",x[1]),'()[3]'),')+',paste0('omega',gsub("\\.","",x[1]),'()[4]'),'))')
),
paste0('as.numeric(',x[1],')+I(as.numeric(',x[1],'))^2')),
x[1])),collapse = "+")))
编辑:我发现我收到了
[1] "omegaday()[1]" "omegahour()[1]" "omegasource()[1]" "omegaservice()[1]" "omegarelevancy()[1]" "omegatollfree()[1]" [7] "omegadistmean()[1]" "omegasimimean()[1]"
代替
[1] 1 2 3 4 5 6 7 8
我试着放了一个
get(paste0('omega',gsub("\\.","",x[1]),'()[1]'))
但它仍然没有返回值。
错误:找不到对象“omegaday()[1]”
有什么建议吗?感谢您的帮助!
【问题讨论】:
-
这是一个非常难以阅读的示例......如果您提供一个使用公式失败的简单示例,而不是太多噪音,那么它会更容易帮助您
-
@daattali 运行这个例子有困难吗?我以与反应部分相同的方式构建它,但我用
input$...代替它在我的原始代码中收到的内容。我认为问题在于解析paste0('omega',gsub("\\.","",x[1]),'()[1]')