您好,我遇到了一个有趣的问题
当我做 :
touchtimepairs = structure(list(v..length.v.. = structure(c(1543323677.254, 1543323678.137, 1543323679.181, 1543323679.918, 1543323680.729, 1543323681.803, 1543323682.523, 1543323682.977,1543323683.519, 1543323684.454), class = c("POSIXct", "POSIXt"), tzone = "CEST"),v.2.length.v.. = structure(c(1543323678.137, 1543323679.181, 1543323679.918, 1543323680.729, 1543323681.803, 1543323682.523, 1543323682.977, 1543323683.519, 1543323684.454, 1543323690.793), class = c("POSIXct", "POSIXt"), tzone = "CEST")), .Names = c("v..length.v..", "v.2.length.v.."), row.names = c(NA, 10L), class = "data.frame")
data = data.frame(a = seq(1,10), b = seq(21,30), posixtime = touchtimepairs[,1])
for(x in seq(nrow(touchtimepairs))){
a = data$[data$posixtime < touchtimepairs[x,2],]
}
它没有问题,我可以返回结果,但是当我尝试使用Apply
a = apply(touchtimepairs, 1,
function(x) data[data$posixtime < x[2],])
它不再工作了,我得到一个空的数据框。与subset()命令相同。有趣的是,当我做>而不是<它起作用时!
a = apply(touchtimepairs, 1,
function(x) data[data$posixtime > x[2],])
然后还有另一个问题:
在>比较的情况下应用,则为for循环提供另一个结果
1951行带apply和1897行带for循环
任何人都可以重现这种行为吗?
如果有兴趣的话,posix时间也可以是毫秒
非常感谢
如果你看一下你的数据里面的apply
匿名函数,你会看到引起你的麻烦的症状。
apply(touchtimepairs, 1, class)
# 1 2 3 4 5 6 7 8 9 10
# "character" "character" "character" "character" "character" "character" "character" "character" "character" "character"
(它应该返回带有POSIXct
和的2行矩阵POSIXt
。)我还应该注意,我一直在收到有关的警告unknown timezone 'CEST'
。我暂时通过修复了该问题attr(touchtimepairs[[1]], "tzone") <- "UTC"
,但这只是为了阻止控制台上的警告。它不能解决问题,可能只是我的系统。:-)
如果您尝试同时使用的两个列touchtimepairs
,则有两个选择:
如果您一次确实只需要其中之一touchtimepairs
,那么lapply
它将起作用:
lapply(touchtimepairs[[1]],
function(x) subset(data, posixtime < x))
如果需要同时使用两列,请在行上使用索引:
lapply(seq_len(nrow(touchtimepairs)),
function(i) subset(data, posixtime < touchtimepairs[i,2]))
(您还将touchtimepairs[i,1]
以某种方式引用)。
特别是如果您尝试同时使用两个列,则可以使用Map
:
Map(function(a, b) subset(data, a < posixtime & posixtime <= b),
touchtimepairs[[1]], touchtimepairs[[2]])
(这不会在示例数据中返回任何内容,因此该数据不是最佳的代表性示例,或者您不打算以这种方式使用它。很可能是后者,我只是在猜测:-)
Map
和*apply
系列之间的最大区别是,它接受一个或多个矢量/列表并将它们压缩在一起。作为这种“拉链”效果的示例:
Map(func, 1:3, 11:13)
有效地调用:
func(1, 11)
func(2, 12)
func(3, 13)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句