美好的一天,
我是初学者,并试图理解为什么我会收到以下错误。
我正在尝试根据数据集中的列值创建一个返回0或1的函数。
LT = function(Lost.time) {
For (i in 1:dim(df)) {
if (df$Lost.time > 0) {
x = 1
}
else {
x = 0
}
return(x)
}
}
错误:没有返回的功能,跳到顶级另外:警告 消息:在if(df $ Lost.time> 0){:条件有长度>仅限1 将使用第一个元素> }错误:意外'}'在"}"
答案 0 :(得分:3)
目前尚不清楚您实际想要在函数中返回什么。 return
只能被调用一次,之后它将返回一个值,函数将终止。
如果你想获得一个包含1或0的向量,具体取决于你的数据框中的给定行是否有Lost.time > 0
,那么下面的一行应该可以解决这个问题:
x <- as.numeric(df$Lost.time > 0)
答案 1 :(得分:3)
代码中有几个错误:
for
代替For
。df$Lost.time
中的条目,则应使用df$Lost.time[i]
在循环内处理各个元素。但是,此任务不需要循环。else
语句不应该从代码的新行开始。在第一个块之后,解析器无法知道if
语句未完成。如果else
语句包含在} else {
中的花括号中,那么就没有问题。df
而不是Lost.time
,但可能需要重写部分功能。1:dim(df)
循环中使用for
应该有效,但会触发警告消息。最好使用1:nrow(df)
。这些是语法问题。但是,主要问题可能是@TimBiegeleisen在答案中解决的问题:在循环中,您正在检查nrow(df)
df$Lost.time
个元素中是否满足特定条件。因此,将单个二进制结果作为返回值似乎没有意义。该函数的目的应在实现之前澄清。
此函数的替代方法可以使用ifelse
一行构建。
答案 2 :(得分:0)
如果循环用于写入函数,则应为每个元素使用索引。 在数据框中创建一个变量(x),如果语句为真,则打印1 else 0
LT = function(Lost.time) {
for (i in 1:dim(df)) {
if (as.numeric(df$Lost.time[i]) > 0) {
df$x[i] <- 1
}else{
df$x[i] <- 0
}
}
}