【订正版】研一R语言选修课程第二次课后习题分享(含源代码)

一、写在前面的话

昨天下午发的版本不够完善,老师希望我们也能用outer函数解决问题,但是我对R语言了解不深,在一番学习之后,简单实现了老师的要求,这篇博客将补全另外六种情况。

有更好的方法的同学可以私聊我,给我一个求学的机会。

二、题目分享

在这里插入图片描述

三、源代码分享

sink("./23.R-Project/output2.doc", append = TRUE, split = TRUE)
# R语言第二次作业,环境:R,编译器:VSCode('PPT第一题,未要求写,可以不做!')
# 恰有一次出现正面
p_1 <- dbinom(1, size = 3, prob = 0.5)
print(p_1)

# 至少有一次出现正面
p_2 <- 1 - dbinom(0, size = 3, prob = 0.5)
print((p_2))


print('-------------------放回的情况-------------------')
x <- c('白1', '白2', '白3', '白4', '红1', '红2')

# 取到两只都是白球的概率
p_3 <- dbinom(2, size = 2, prob = 2 / 3) 
print(p_3)

# 取到两只球颜色相同的概率
p_4 <- dbinom(2, size = 2, prob = 1 / 3) + dbinom(2, size = 2, prob = 2 / 3)
print(p_4)

# 取到两只球中至少有一只是白球的概率
p_5 <- 1 - dbinom(0, size = 2, prob = 2 / 3)
print(p_5)

print('-------------------不放回的情况-------------------')
# 考虑不放回的情况
# 取到两只都是白球的概率
sam <- choose(4, 1) * choose(3, 1)
all <- choose(6, 1) * choose(5, 1)
p_6 <- sam / all
print(p_6)

# 取到两只球颜色相同的概率
p_7 <- p_6 + (choose(2 , 1) / all)
print(p_7)

# 取到两只球中至少有一只是白球的概率
p_8 <- 1 - (choose(2, 1) / all)
print(p_8)

print('-------------------利用outer函数的放回情况-------------------')
output <- outer(x, x, FUN = 'paste')
print(output)
counts_3 <- 0
counts_4 <- 0
for (x_1 in x){
    for (x_2 in x){
        if (substr(x_1, 1, 1) == '白' & substr(x_2, 1, 1) == '白'){
            counts_3 <- counts_3 + 1
        }
        if (substr(x_1, 1, 1) == '红' & substr(x_2, 1, 1) == '红'){
            counts_4 <- counts_4 + 1
        }
    }
}
all_2 <- length(x) **2
a_4 <- counts_3 / all_2
print(a_4)

a_5 <- (counts_3 + counts_4) / all_2
print(a_5)

a_6 <- 1 - counts_4 / all_2
print(a_6)


print('-------------------利用outer函数的不放回情况-------------------')
counts_1 <- 0
counts_2 <- 0
x <- c('白1', '白2', '白3', '白4', '红1', '红2')
for (x_1 in x){
    y <- x[-which(x == x_1)]
    out <- outer(x_1, y, FUN = "paste")
    print(out)
    for (y_1 in y){
        if (substr(x_1, 1, 1) == '白' & substr(y_1, 1, 1) == '白'){
            counts_1 <- counts_1 + 1
        }
        if (substr(x_1, 1, 1) == '红' & substr(y_1, 1, 1) == '红'){
            counts_2 <- counts_2 + 1
        }
    }
}
all <- length(x) * length(y)
a_1 <- counts_1 / all
print(a_1)

a_2 <- a_1 + (counts_2 / all)
print(a_2)

a_3 <- 1 - (counts_2 / all)
print(a_3)

sink()

四、结果展示

> source("d:\\Code Project\\23.R-Project\\homework_2.r", encoding = "UTF-8")
[1] 0.375
[1] 0.875
[1] "-------------------放回的情况-------------------"
[1] 0.4444444
[1] 0.5555556
[1] 0.8888889
[1] "-------------------不放回的情况-------------------"
[1] 0.4
[1] 0.4666667
[1] 0.9333333
[1] "-------------------利用outer函数的放回情况-------------------"
     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
[1,] "白1 白1" "白1 白2" "白1 白3" "白1 白4" "白1 红1" "白1 红2"
[2,] "白2 白1" "白2 白2" "白2 白3" "白2 白4" "白2 红1" "白2 红2"
[3,] "白3 白1" "白3 白2" "白3 白3" "白3 白4" "白3 红1" "白3 红2"
[4,] "白4 白1" "白4 白2" "白4 白3" "白4 白4" "白4 红1" "白4 红2"
[5,] "红1 白1" "红1 白2" "红1 白3" "红1 白4" "红1 红1" "红1 红2"
[6,] "红2 白1" "红2 白2" "红2 白3" "红2 白4" "红2 红1" "红2 红2"
[1] 0.4444444
[1] 0.5555556
[1] 0.8888889
[1] "-------------------利用outer函数的不放回情况-------------------"
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,] "白1 白2" "白1 白3" "白1 白4" "白1 红1" "白1 红2"
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,] "白2 白1" "白2 白3" "白2 白4" "白2 红1" "白2 红2"
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,] "白3 白1" "白3 白2" "白3 白4" "白3 红1" "白3 红2"
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,] "白4 白1" "白4 白2" "白4 白3" "白4 红1" "白4 红2"
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,] "红1 白1" "红1 白2" "红1 白3" "红1 白4" "红1 红2"
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,] "红2 白1" "红2 白2" "红2 白3" "红2 白4" "红2 红1"
[1] 0.4
[1] 0.4666667
[1] 0.9333333
>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅途中的宽~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值