我正在进行一项实验。我从1号到6号进行采样,我这样做了3次。在实验的每次运行中,我实现了一些逻辑来获得“主”向量。然后我重复实验5次。我的代码是:
main<- vector("numeric",5)
for (i in 1:5)
{
s<-sample(c(1,2,3,4,5,6), 3, replace = FALSE)
print(s)
if(s[1]>3)
{
main[i]<-s[1]
}else
{
if(s[2]>3)
{
main[i]<-s[2]
}
else
{
main[i]<-s[3]
}
}
}
print(main)
当你跑步时,你会看到类似的东西:
[1] 5 1 2
[1] 5 2 1
[1] 6 1 4
[1] 3 4 1
[1] 2 5 1
> print(main)
[1] 5 5 6 4 5
主要载体的制作遵循以下规则:
我想知道有更简洁,更有效,更有效的方法吗?使用vecotors而不是循环和if语句等...
谢谢。
答案 0 :(得分:3)
我会按如下方式重写您的代码:
replicate(5, {
s<-sample(c(1,2,3,4,5,6), 3, replace = FALSE)
s[c(which(s[1:2] > 3), 3)[1]] # return 1st, 2nd or 3rd element
})
c(which(s[1:2] > 3), 3)[1]
如果s[1] > 3
则返回1,如果s[2] > 3
则返回2,否则返回3
。
因此,s[c(...)[1]]
会相应地选择第一个,第二个或第三个元素。