尝试创建一个函数,生成累积热量单位所需的天数列表/向量。
Day<-c(1:10)
min1<-c(0.70,1.45,2.22,2.98,3.75,4.50,5.02,5.34,5.61,5.81)
data<-as.data.frame(cbind(Day,min1))
以下函数正确输出数据$ min1超过2的日期:
days.till<-function (x) min(data$Day[data$min1>=x])
days.till(2)
但如果我尝试使用多个x值,我会收到错误。
days.till(2:4)
[1] 4
Warning message:
In data$min1 >= x :
longer object length is not a multiple of shorter object length
以下策略会返回相同的错误:
days.till(c(2:4))
days.till<-function (x=2:4) min(data$Day[data$min1>=x])
我在其他更简单的函数中使用多个输入值没有问题,所以我担心函数中的向量索引会导致问题。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用sapply
计算传递的向量中每个元素的所需值:
days.till <- function(x) sapply(x, function(y) min(data$Day[data$min1>=y]))
days.till(2:4)
# [1] 3 5 6
答案 1 :(得分:0)
Day<-c(1:10)
min1<-c(0.70,1.45,2.22,2.98,3.75,4.50,5.02,5.34,5.61,5.81)
mydata<-as.data.frame(cbind(Day,min1))
days.till <- function(x,data=mydata) {
if (length(x)==1){
return(min(data$Day[data$min1>=x]))
} else if (length(x)>1) {
return(lapply(x,days.till,data=data))
}
}
## > days.till(2)
## [1] 3
## > days.till(2:4)
## [[1]]
## [1] 3
## [[2]]
## [1] 5
## [[3]]
## [1] 6
答案 2 :(得分:0)
这是您的功能的修改版本:
days.till <- function(thresh)
with(data, Day[sapply(thresh, function(x) which(min1 >= x)[1])])
days.till(2:4)
# [1] 3 5 6