r - 根据 r 中的条件使用 Map 函数获取 NA 列表
问题描述
我有一个这样的数据集:
library(data.table)
library(EnvStats)
DT <- data.table(MEAN = c(0.5,0.7,0.9,0.8),MIN = c(0.4,0.6,0.8,0.8),MAX = c(0.6,0.8,1,0.8),REF = rnorm(4,1000,200))
我计算了一个 var ,其中包含来自 vars 的模拟值列表,MEAN
但我需要返回 NA 值 if或 。像这样的东西:MIN
MAX
MEAN <= MIN
MEAN >= MAX
DT[, Sim_rtri := Map(function(w, x, y, z) ifelse(z <= x | z >= y,NA,w*(1+rtri(n = 10000,min = x,max =
y,mode = z))), REF, MIN, MAX, MEAN)]
但是在所有情况下我都得到一个只有一个值的输出。像这样:
DT
MEAN MIN MAX REF Sim_rtri
1: 0.5 0.4 0.6 1274.1917 1957.572
2: 0.7 0.6 0.8 887.0604 1503.418
3: 0.9 0.8 1.0 1072.6257 2011.683
4: 0.8 0.8 0.8 1126.5725 NA
相反,我想要的输出是:
DT
MEAN MIN MAX REF Sim_rtri
1: 0.5 0.4 0.6 1274.1917 1946.223,1849.996,1933.170,1940.845,1905.784,1943.204,...
2: 0.7 0.6 0.8 887.0604 1512.938,1530.315,1480.203,1542.298,1500.740,1513.961,...
3: 0.9 0.8 1.0 1072.6257 2055.113,2085.123,1991.335,2022.209,2010.288,1984.313,...
4: 0.8 0.8 0.8 1126.5725 NA, NA, NA, NA, NA,....
我怎样才能得到这个?
解决方案
在这里,我们需要if/else
而不是ifelse
要求ifelse
所有参数具有相同的长度,rtri
n
显然很大并且与test
向量的长度不同,length
因为我们在每一行上循环时为 1
DT[, Sim_rtri := Map(function(w, x, y, z) if(z <= x | z >= y) NA
else(w*(1+rtri(n = 10000,min = x,max =
y,mode = z))), REF, MIN, MAX, MEAN)]
DT
# MEAN MIN MAX REF Sim_rtri
#1: 0.5 0.4 0.6 1292.650 1894.088,1943.958,1935.992,1881.802,1918.530,1975.114,...
#2: 0.7 0.6 0.8 1037.545 1817.918,1742.029,1719.068,1753.283,1786.834,1803.231,...
#3: 0.9 0.8 1.0 1204.405 2327.954,2306.122,2198.317,2223.934,2235.752,2328.857,...
#4: 0.8 0.8 0.8 881.633 NA
此外,如果我们需要n
NA,只需复制NA
inif
if(z <= x | z >= y) rep(NA, 10000)
推荐阅读
- xml - 无法让 XSD 1.1 Type Alternative 工作
- java - 使用 java spark 将键值对解析为 Hive 数据集行
- reactjs - 反应未定义的道具问题
- javascript - 如何捕获 cucumberJS 超时而不是失败步骤
- mongodb - 如何从 pymongo 进行正确查询
- nightwatch.js - Nightwatch waitForElementVisible - abortOnFailure 参数设置为 false - 测试退出状态非零
- java - 如何使用 graphql-java 和 graphql-java-servlet 为 GraphQL 订阅编写解析器?
- square-connect - 向结帐 api 交易添加税金
- python - Python Unittest:由于从同一文件夹导入而失败
- c - 使用二进制掩码解析选项