简单如果else语句中的语法错误在R
问题描述:
我想R到以下: 如果LocID等于3,4,7,8,14,则数据$ newConc等于数据$ conc/2 否则数据$ newConc < - 数据$浓#否则保持浓度相同简单如果else语句中的语法错误在R
data$newConc <- if(data$LocID == c(3,4,7,8,14))
data$conc/2 else data$conc
str(data)
$ LocID : int 1 2 3 4 5 6 7 8 9 10 ...
$ time : int 1 1 1 1 1 1 1 1 1 1 ...
$ conc : num 0.03695 0.0155 0.00738 0.00753 0.01795 ...
警告: 条件具有长度> 1,只有第一个元素将被用于
答
至于我可以告诉你代码(它甚至不会运行,由于缺少右括号?)您正在尝试执行(伪代码):
foreach row in data
if row$LocID is one of 3, 4, 7, 8, or 14
THEN set row$newConc to row$conc/2
ELSE set row$newConc to row$conc
为此,您可以使用ifelse
。
此外,如果你想测试一个值是否等于OT 3,4,7,8或14,然后不使用==
- 这将返回一个矢量布尔值,和if
需要单个布尔,因此你的错误。
要么使用data$locID %in% c(3,4,7,8,14)
返回一个单 TRUE/FALSE,或使用any(data$locID == c(3,4,7,8,14))
把布尔的载体导入一个布尔:
你是个标量比较矢量,所以你的输出一个向量。一个if
语句只需要一个布尔值(不是布尔值的向量)。
要么使用data$locID %in% c(3,4,7,8,14)
返回一个单个 TRUE/FALSE,或者使用any(data$locID == c(3,4,7,8,14))
转布尔值的向量成单个布尔值:
data$newConc <- ifelse(data$locID %in% c(3,4,7,8,14),
data$conc/2,
data$conc)
备选地我可以使用ifelse(any(data$locID == c(3,4,7,8,14)), ...)
。
您提供的R代码无效......没有平衡括号?你的意思是'ifelse'? – 2012-03-13 04:59:24
我编辑了我的语法 – Amateur 2012-03-13 05:28:16