R 从列表中创建具有名称的对象列表

R 从列表中创建具有名称的对象列表,r,bizdays,R,Bizdays,希望它不是重复的,很难正确表达(对R来说相对较新) 所以问题是:我想使用基于行信息的日期序列,不包括某些工作日。我可以使用bizdays动态创建calendar对象,但效率很低-我宁愿在创建之前创建它们并根据需要使用它们。另一方面,我不想为可能发生的每个对象创建日历(太多了,麻烦了,所有工作日加上带/不带假日的版本的组合) 我可以为每一行创建一个包含开始/结束日期之间的日期列表的数据框,但我需要提供一个包含工作日的日历 P <- setDT(R)[, list(ID=ID,

希望它不是重复的,很难正确表达(对R来说相对较新) 所以问题是:我想使用基于行信息的日期序列,不包括某些工作日。我可以使用
bizdays
动态创建
calendar
对象,但效率很低-我宁愿在创建之前创建它们并根据需要使用它们。另一方面,我不想为可能发生的每个对象创建日历(太多了,麻烦了,所有工作日加上带/不带假日的版本的组合)

我可以为每一行创建一个包含开始/结束日期之间的日期列表的数据框,但我需要提供一个包含工作日的日历

P <- setDT(R)[, list(ID=ID,  
                     dt=bizseq(Start.Date,End.Date, cal)
), by=1:nrow(R)]
因此,现在是正确的问题;)首先,这是最好的方法吗?如果是,那么-如何以它们的名称创建这3个对象(“
c101
”等),例如,
c100
将与星期一的日历相匹配-这不是一个如何创建日历的问题,因为上述方法有效(用名称替换点就足够了),但是,如果我以动态方式创建名称,如何创建将成为日历的对象
c101
?我可以想象在行中循环,但不知道如何强制将结果对象命名为
udf$S
。除非您认为提供相应日历的方法比从预先创建的对象列表(对于具有数千个日期和休假天数组合的数据框)中获取()更好。 基本上,我希望最终得到3个名为
c010、c110、c001、
的日历对象,但是如果在运行
setDT()
函数之前,扩展表有更多独特的选项来创建所有其他组合

事后思考:我可以将ID添加到udf中,通过索引调用日历,然后将索引返回给df,但我想知道是否可以像我尝试的那样创建对象的动态名称

注 在萨提斯的领导下,我使用了似乎足够的方法:

for(i in 1:nrow(udf)) {
  cal <- Calendar(weekdays=c(ifelse(udf[i,1]==0,"","monday"), ifelse(udf[i,2]==0,"","tuesday"),ifelse(udf[i,3]==0,"","wednesday")))
  assign(udf[i,4], cal)
}
for(1中的i:nrow(udf)){

cal应用(自定义项,1,函数(x)日历(工作日=代表(x,c(“星期一”、“星期二”、“星期三”))不需要在udf中创建S列您正在寻找此列或其他内容吗?是的,这不是将任何内容应用于短udf的问题,而是使用udf创建一组日历,这些日历可以应用于更大的df。udf只是必须预创建的日历列表-所有可能的变体)。问题是如何从另一个表调用在udf上创建的日历。请提供另一个表。您可以使用dput获取数据
> M <-c(0,1,1,0)
> T <- c(1,1,1,0)
> W <- c(0,0,0,1)
> df <- data.frame(M,T,W)
> df$S <-paste0("c",df$M,df$T,df$W)
> udf <- unique(df)
> udf
  M T W    S
1 0 1 0 c010
2 1 1 0 c110
4 0 0 1 c001
require(bizdays)

loop or apply?
.... <- Calendar(weekdays=c(ifelse(udf$M==0,"","monday"), ifelse(udf$T==0,"","tuesday"),ifelse(udf$W==0,"","wednesday")))
for(i in 1:nrow(udf)) {
  cal <- Calendar(weekdays=c(ifelse(udf[i,1]==0,"","monday"), ifelse(udf[i,2]==0,"","tuesday"),ifelse(udf[i,3]==0,"","wednesday")))
  assign(udf[i,4], cal)
}