我最近从r开始,我遇到了if和ifelse的问题。
这是我尝试过的
two_d6 <- function(n)
{
random_numbers <- matrix(
sample(6, 2 * n, replace = T),
nrow = 2
)
colSums(random_numbers)
}
这是一个生成随机数的函数,没有问题
scores <- two_d6(10)
for(i in 1:length(scores))
{
if(scores[i] %in% c(2,3,12))
{
game_statues <- F
point <- NA
} else if(scores[i] %in% c(7,11))
{
game_statues <- T
point <- NA
} else
{
game_statues <- NA
point <- scores
}
}
game_table <- data.frame(game_statues = game_statues, point = point,
score = scores) ; game_table
game_statues point score
1 NA 10 10
2 NA 7 7
3 NA 10 10
4 NA 9 9
5 NA 7 7
6 NA 5 5
7 NA 5 5
8 NA 11 11
9 NA 7 7
10 NA 4 4
不起作用,似乎只有最后的"else"工作的一部分。
Then I try:
ifelse(scores %in% c(2,3,12), ((game_statues <- F) & (point <- NA)),
ifelse(scores %in% c(7,11), ((game_statues <- T) & (point <- NA)),
((game_statues <- NA ) & ( point <- scores))))
[1] NA NA NA NA NA FALSE NA NA NA NA
game_table <- data.frame(game_statues = game_statues, point = point,
score = scores) ; game_table
game_statues point score
1 NA 8 8
2 NA 9 9
3 NA 7 7
4 NA 8 8
5 NA 6 6
6 NA 2 2
7 NA 8 8
8 NA 10 10
9 NA 7 7
10 NA 4 4
似乎与if函数的原因相同。
我看不出有什么问题。你能告诉我如何用这两个功能来改进,得到合适的表格吗?谢谢!
您可以使用ifelse
作为-
game_statues <- ifelse(scores %in% c(2,3,12), FALSE,
ifelse(scores %in% c(7,11), TRUE, NA))
point <- scores
point[!is.na(game_statues)] <- NA
game_table <- data.frame(game_statues, point, scores)
game_table
# game_statues point scores
#1 NA 5 5
#2 FALSE NA 2
#3 NA 8 8
#4 NA 4 4
#5 TRUE NA 7
#6 TRUE NA 7
#7 TRUE NA 7
#8 NA 8 8
#9 NA 6 6
#10 NA 6 6