解释从‘if’函数发出的“条件有长度>1”警告

解释从‘if’函数发出的“条件有长度>1”警告

我有一个数组:

a <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

并希望实现以下功能:

w<-function(a){
  if (a>0){
    a/sum(a)
  }
  else 1}

此函数希望检查a大于0,如果是,则将每个元素除以总数之和。

否则它应该只记录1。

我收到以下警告信息:

 Warning message:
 In if (a > 0) { :
 the condition has length > 1 and only the first element will be used

如何纠正这个函数?


HUWWW
浏览 1025回答 3
3回答

人到中年有点甜

也许你想ifelse:a&nbsp;<-&nbsp;c(1,1,1,1,0,0,0,0,2,2)ifelse(a>0,a/sum(a),1) &nbsp;[1]&nbsp;0.125&nbsp;0.125&nbsp;0.125&nbsp;0.125&nbsp;1.000&nbsp;1.000&nbsp;1.000&nbsp;1.000 &nbsp;[9]&nbsp;0.250&nbsp;0.250

慕田峪4524236

if语句没有向量化。对于向量化的if语句,应使用ifelse..在您的情况下,只需编写w&nbsp;<-&nbsp;function(a){if&nbsp;(any(a>0)){ &nbsp;&nbsp;a/sum(a)} &nbsp;&nbsp;else&nbsp;1}或者是一个简短的矢量化版本ifelse(a&nbsp;>&nbsp;0,&nbsp;a/sum(a),&nbsp;1)这取决于您想要使用哪一个,因为第一个函数给出长度为1的输出向量(在其他部分中)和ifelse给出长度等于a.

噜噜哒

这里有一个简单的方法ifelse:(a/sum(a))^(a>0)例如:a&nbsp;<-&nbsp;c(0,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;1,&nbsp;0,&nbsp;1)(a/sum(a))^(a>0)[1]&nbsp;1.00&nbsp;0.25&nbsp;1.00&nbsp;1.00&nbsp;0.25&nbsp;0.25&nbsp;1.00&nbsp;0.25
打开App,查看更多内容
随时随地看视频慕课网APP