【问题标题】:Why my for loop for my curve returns `Inf` in R?为什么我的曲线的 for 循环在 R 中返回“Inf”?
【发布时间】:2017-06-09 05:15:21
【问题描述】:

我试图在 R 中循环 2 条曲线,但只有一条曲线显示。更重要的是,我两次调用axis() 命令(对于 x 和 y 轴)但我得到以下错误:

Error in axis(1, at = success/trials) : no locations are finite

'to' must be a finite number

问题

我想知道(a)为什么只显示我的第一条曲线,(b)为什么我在axis() 电话中收到Inf/-Inf?

这是我的 R 代码:

success = c(10, 50) ; trials = 100

for(i in 1:length(success)){

success = success[i]
    col = (1:length(success))[i]

c = curve( dbinom(success, trials, x), 0, 1, add = ifelse(i > 1, T, F), ty = "l", xlim = c(0, 1), 
           col = col, yaxt = "n")

text(success/trials, max(c$y), bquote(bolditalic(H[.(i)])), pos = 3, xpd = T )

axis(1, at = success/trials)  

}

axis(2, at = seq(0, max(c$y), len = 7), labels = round(seq(0, max(c$y), len = 7), 2), las = 1 )

【问题讨论】:

    标签: r function for-loop plot


    【解决方案1】:

    在第一次循环中,您将success 设置为success[1],在第二次循环中,您将success 设置为success[2],但success 在该点的长度为1,因此它变为NA.

    同样,第二个图没有显示,因为 col 出于同样的原因变为 NA。

    要解决此问题,请为成功列表和循环中的变量使用不同的名称。例如,使用successes = c(10,50),然后在循环内设置success 和col 时使用successes。 (或者col,只需设置col = i。)

    将其应用于您的代码:

    successes = c(10, 50) ; trials = 100
    for(i in 1:length(successes)){
        success = successes[i]
        col = i
        c = curve( dbinom(success, trials, x), 0, 1, add = ifelse(i > 1, T, F), ty = "l", xlim = c(0, 1), 
                   col = col, yaxt = "n")
        text(success/trials, max(c$y), bquote(bolditalic(H[.(i)])), pos = 3, xpd = T )
        axis(1, at = success/trials)  
    }
    axis(2, at = seq(0, max(c$y), len = 7), labels = round(seq(0, max(c$y), len = 7), 2), las = 1 )
    

    【讨论】:

    • 一个后续问题。如何在ith 轮中找出最大的max(c$y)?也就是说,例如,在你的答案中,success 为 10 时的max(c$y) 大于success 为 50 时的max(c$y),我怎样才能找到在哪一轮在循环中,max(c$y) 更大?
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多