我正在尝试根据先前创建的R代码来创建一个闪亮的程序。
我面临的问题是for循环不起作用。
一个例子是:
centros.acp=reactive({colMeans(a.acp())})
lcov.acp=reactive({solve(cov(a.acp()))})
dm.acp=reactive({rep(0,length(a.acp()[,1]))})
na.acp=reactive({a.acp()[1]})
dm.acp()=reactive({
value=dm.acp()
for(i in na.acp()){
value()[i]<-reactive({round(t(a.acp()[i,]-centros.acp())%*%lcov.acp()%*%(a.acp()[i,]-centros.acp()),3)
})}})
T2<-reactive({dm.acp()})
my_list=reactive({list("T2" = T2(),"cc.sw.UCL.99" = cc.sw.UCL.99(),"cc.sw.UCL.95" = cc.sw.UCL.95(), "num.com"=num.com())})
output$plot_t2=renderPlot({plot(1:n(),my_list()$T2, ylim = c(0,max(my_list()$T2,my_list()$cc.sw.UCL.99)+3),main = "",
xlab = 'OBS',ylab = 'T2') })我知道错误了
Error in dm.acp() = reactive({ : invalid (NULL) left side of assignment我展示的代码是唯一对问题重要的部分,其他的一切都在工作。我尝试过不同的方法,但总是得到错误,或者所绘制的图形是基于包含0的组的原始dm.acp()。当我运行for循环时,我希望用值替换0(在每次迭代中,一个新的数字被更改)。
原始的dm.acp()是
> dm.acp
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[50] 0 0 0 0 0 0 0 0 0 0 0在for循环之后应该是
[1] 6.210 3.663 4.246 4.279 3.766 3.583 2.957 4.796 4.578 3.225 4.232 2.865 6.976 3.454
[15] 3.411 3.530 3.610 22.747 9.936 2.659 3.080 6.412 9.183 2.781 3.253 5.585 3.183 5.171
[29] 3.898 5.868 2.498 12.901 2.772 2.795 1.644 1.393 21.078 2.489 3.198 2.412 4.213 4.251
[43] 8.144 3.201 3.295 4.378 4.746 9.481 4.281 4.402 5.329 2.637 2.627 4.507 5.521 3.545
[57] 2.623 5.835 2.438 3.230我很感谢你的帮助。谢谢!
发布于 2020-07-14 22:20:41
尝试将for循环替换为lapply,如下所示:
lapply(1:na.acp(), function(i){
value()[i]<-reactive({
round(t(a.acp()[i,]-centros.acp())%*%lcov.acp()%*%(a.acp()[i,]-centros.acp()),3)
})
})更新:请尝试此代码。
dm.acp<-c(rep(0,60))
n <- length(dm.acp)
lapply(1:n, function(i) {
dm.acp[i] <<- i+2
})您应该能够在您的程序中实现这一点。如果要在lapply中使用函数,请将其括为lapply(1:(length(na.acp)),function(i){…})。
Update2:请看下面的代码
### replace this code ###
dm.acp=reactive({rep(0,length(a.acp()[,1]))})
na.acp=reactive({a.acp()[1]})
dm.acp()=reactive({
value=dm.acp()
for(i in na.acp()){
value()[i]<-reactive({round(t(a.acp()[i,]-centros.acp())%*%lcov.acp()%*%(a.acp()[i,]-centros.acp()),3)
})}})
T2<-reactive({dm.acp()})
### with this code ###
dm.acpv=reactive({rep(0,length(a.acp()[,1]))})
na.acp=reactive({a.acp()[1]})
T2 <- reactive({
value=dm.acpv()
lapply(1:(na.acp()), function(i){
value[i] <<- round(t(a.acp()[i,]-centros.acp())%*%lcov.acp()%*%(a.acp()[i,]-centros.acp()),3)
})
value
})
## no need to define T2 again as I renamed dm.acp as T2https://stackoverflow.com/questions/62900774
复制相似问题