noob问题;) 我如何强制列表回收功能中的条件? 当我运行
mylist <- list(a = 3, b = c(2,8), c = c(1,4))
sumit<-function(v){x<-v$a + v$b + v$c}
x<-sumit(mylist)
它当然正确返回6和15(回收mylist $ a)。但是如果我想跑步
sumit<-function(v){
x<-v$a + v$b + v$c
if (v$c ==1) x<-x*100
}
x<-sumit(mylist)
它不希望回收条件,并且在两种情况下mylist$c = 1
都使用600和1500而不是600和15
您如何强制它回收参数?我已经从rebus库中看到了回收功能,但是它与我使用的其他几个软件包有冲突,并且我不想将$c
移至参数,因为在此过程中我不知道列表的哪个元素将具有什么长度-有时c可能有3个值,有时b等等。
我不希望通过将列表分为3个向量将其拆分为sumit(a,b,c)
答案 0 :(得分:1)
您想要ifelse
:
mylist <- list(a = 3, b = c(2,8), c = c(1,4))
sumit<-function(v){x<-v$a + v$b + v$c}
x<-sumit(mylist)
sumit<-function(v){
x<-v$a + v$b + v$c
x <- ifelse (v$c ==1, x*100,x)
}
x<-sumit(mylist)
x
# [1] 600 15
if
适用于单长度逻辑,在其他情况下采用第一个元素,ifelse
适用于矢量。