“条件的长度 > 1,仅使用第一个元素”错误
Posted
技术标签:
【中文标题】“条件的长度 > 1,仅使用第一个元素”错误【英文标题】:"the condition has length > 1 and only the first element will be used" error 【发布时间】:2014-11-14 16:35:48 【问题描述】:我的 f 语句有问题,因为它返回给我这个错误消息:“条件的长度 > 1 并且只使用第一个元素” 我有一个名为 data.summary 的数据框,我想根据数据框的另一个变量创建两个新变量 vol.up 和 vol.down。 这是我的脚本代码:
data.summary <- call.dat12[,c("Dur...ms.", "Handset.Manufacturer",
"Src.Dst.Sig.Vol..Bytes.", "Dst.Src.Sig.Vol..Bytes.",
"group", "Src.Node.Type", "Dst.Node.Type")]
if (data.summary$Src.Node.Type == "eNodeB")
data.summary$vol.up <- data.summary$Src.Dst.Sig.Vol..Bytes.
data.summary$vol.down <- data.summary$Dst.Src.Sig.Vol..Bytes.
else
data.summary$vol.up <- data.summary$Dst.Src.Sig.Vol..Bytes.
data.summary$vol.down <- data.summary$Src.Dst.Sig.Vol..Bytes.
我真的不明白为什么 f 语句不适用于 vector ? 提前致谢
【问题讨论】:
这些问题对你有帮助吗***.com/search?q=%22the+condition+has+length+%3E+1%22 不是真的,我已经看过了data.summary$Src.Node.Type
将是一个向量,其项目数与data.summary
中的行数相同。您可能需要两个不同的 ifelse
语句。
【参考方案1】:
您的比较是一个具有多个元素的 TRUE/FALSE 向量,为了使 if
- else
起作用,通常需要一个长度为 1 的逻辑向量,而不是 NA
。也许你需要的是向量化条件:
ind <- data.summary$Src.Node.Type == "eNodeB"
data.summary$vol.up<- NA
data.summary$vol.down<- NA
#for true
data.summary$vol.up[ind]<- data.summary$Src.Dst.Sig.Vol..Bytes.[ind]
data.summary$vol.down[ind] <- data.summary$Dst.Src.Sig.Vol..Bytes.[ind]
data.summary
# for false
data.summary$vol.up[!ind]<- data.summary$Dst.Src.Sig.Vol..Bytes.[!ind]
data.summary$vol.down[!ind] <- data.summary$Src.Dst.Sig.Vol..Bytes.[!ind]
data.summary
【讨论】:
这不正确。从?`if`
开始,条件定义为非NA 的长度为1 的逻辑向量。接受长度大于 1 的条件并发出警告,但仅使用第一个元素。如果可能,其他类型被强制为逻辑,忽略任何类。
非常感谢,它的工作完美。但我不明白为什么“if else”不起作用?可以举个例子吗,谢谢。
试试这个:x=5; if (x==5) print("正确!") else print("是假的"); #作品; x=c(3,5); if (x==5) print("正确!") else print("是假的"); #不正确!; for(i in seq_along(x)) if (x[i]==5) print("correct!") else print("is false") #works;以上是关于“条件的长度 > 1,仅使用第一个元素”错误的主要内容,如果未能解决你的问题,请参考以下文章
Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误