提供一些示例数据以供参考:
sn,fail_type,dt
V12001,broken ego,2018-12-07 15:58:33
V12002,batt overheat,2018-10-11 22:33:51
V12003,batt overheat,2018-10-26 15:02:51
V12004,broken ego,2018-09-28 15:44:46
V12005,cognitive meltdown,2018-12-31 02:30:04
V12006,won't turn on,2018-12-14 02:05:41
V12007,won't turn on,2018-12-02 21:14:29
V12008,bad system board,2018-11-02 16:30:57
V12009,petulant child operator,2018-09-06 14:53:25
V12010,leaky pump,2018-11-05 14:41:48
V12011,leaky pump,2018-11-04 18:05:11
V12012,petulant child operator,2018-11-23 16:34:54
V12013,cognitive meltdown,2018-09-11 18:07:50
V12014,cognitive meltdown,2018-10-26 22:55:32
V12015,leaky pump,2018-09-19 14:05:29
V12016,no alarm,2018-11-05 23:44:08
V12017,petulant child operator,2018-12-18 14:02:34
V12018,leaky pump,2018-10-08 04:13:41
V12019,bad system board,2018-09-03 02:28:16
V12020,leaky pump,2018-11-10 07:10:50
我从上面创建了一个名为ts_vars的数据表。
然后我想隔离出fail_types的唯一列表,并基于每个唯一的fail_type获取时间序列事件数据。
# get unique list
ft_list <- unique(ts_vars$fail_type)
# clean up unnecessary punctuation
ft_list <- gsub("[[:punct:]]", " ", ft_list)
我接下来要做的是创建一个可以逐行执行的表达式列表,并将分配存储在内存中,因为我将使用它们进行绘图(是的,很多)。我知道,我知道,我使用的是for
循环,并且apply / plyr'ish方法更好,但是将其作为快速/肮脏的MWE放置在那里。
cmdvec <- function() {
for (i in (1:length(ft_list))) {
# name a variable, ts_var, with a numeric suffix
nam <- paste("ts_var",i, sep="")
# stitch together an assignment statement which will store a vector of
events by fail_type, allowing a separate plot for each
sub <- paste("subset(ts_vars,ts_vars$fail_type==",ft_list[i], sep="'", ")")
ts_cmd[i] <- paste(nam,sub,sep=" <- ")
# parse each statement to be evaluated and store in a vector for execution
ts_cmd2 <- as.vector(eval(parse(text = ts_cmd[i]), envir = new.env()))
ts_cmd2
# print(ts_cmd2)
}
}
cmdvec()
照原样,什么都没有发生。我看不到执行结果或新存储的向量(ts_var1 through ts_var187
)。如果用ts_cmd
代替print(ts_cmd)
,则会对语句进行评估,并在控制台中获得结果,但不会存储任何分配。
我尝试评估最后一条语句,调用它(但我无法理解要添加的参数),将字符列表转换为表达式-但我在这里缺少一些关键点,我认为我已经在R基础上找到了所有文档,并从其他切向SO问题中选择了一些想法。我现在很困惑总而言之,我似乎无法传递一个简单的语句列表,因为这些命令都是真正的命令要被一对一处理,并且存储赋值变量供下游使用(图,其他独立分析等)。
有什么想法吗?