使用lapply在具有不同元素数的列表上应用函数

时间:2017-09-21 01:54:38

标签: r

我最近开始在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

1 个答案:

答案 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