我最近开始在R上编码,我有一个问题,我看了很多,但我无法弄明白。
我有一个如下所示的列表,我正在尝试将此功能应用于此列表。我期待找到的是每个Falses和trues的单一价值。
但是当我使用lapply函数时,我收到了这个警告:
在if(x){:
条件的长度> 1,只使用第一个元素。
我在哪里犯错误?先感谢您。
function(x) {if(x)
{runif(1, IQ - VAR, IQ + VAR)} else {runif(1,0.20 - VAR , 0.20 + VAR)}}
[[1]]
[1] FALSE TRUE
[[2]]
[1] FALSE TRUE
[[3]]
[1] FALSE TRUE
[[4]]
[1] FALSE FALSE FALSE TRUE
[[5]]
[1] FALSE FALSE FALSE TRUE
[[6]]
[1] FALSE FALSE FALSE TRUE
[[7]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
答案 0 :(得分:1)
您的问题是在向量上使用if
函数(列表元素)。您应该使用ifelse
:
lapply(L, function(x){ifelse(x, runif(1, IQ - VAR, IQ + VAR), runif(1,0.20 - VAR , 0.20 + VAR))})
例如:
L = list(c(F,T),c(F,F,F,T))
VAR = 1
IQ = 3
lapply(L, function(x){ifelse(x,runif(1, IQ - VAR, IQ + VAR), runif(1,0.20 - VAR , 0.20 + VAR))})
[[1]]
[1] -0.1924877 2.0677188
[[2]]
[1] 1.158114 1.158114 1.158114 2.408010