将打印输出保存为R中的数字列表?

时间:2017-05-06 16:20:22

标签: r list function

我正在编写一个函数来测量音频文件列表中单个发声的持续时间。我需要将这些呼叫持续时间保存为按文件组织的数字列表。当我编写我的函数来打印任务时,它会按照我的要求打印列表,但不会将它们保存到外部变量中。但是,当我退出打印功能时,所有调用都将保存到一个列表,而不指定它们来自哪个文件。有任何想法吗?感谢。

输入:

callduration2 <- function(x) {
  for (i in x) {
      print(timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)$s.end - timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)$s.start)
  }
}

输出:

[1] 0.1035461 4.1581914 1.4687190
[1] 0.2317160 0.3616587 0.3316719 0.2598854 0.2117248 0.2162683 0.1635642 1.0295460
[1] 0.1035461 4.1581914 1.4687190
[1] 0.2283603 0.1571119 0.1023054
[1] 0.2795895 0.2531787
[1] 0.7232425 1.0376167 0.5624210 0.1235691 0.3389063

OR

输入:

callduration <- function(x) {
  output9 <- list()
  for (i in x) {
    i.t <- timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)
    output9 <- append(output9, i.t$s.end - i.t$s.start) 
  }
  output9
}

输出:

[[1]]
[1] 0.1035461

[[2]]
[1] 4.158191

[[3]]
[1] 1.468719

[[4]]
[1] 0.231716

[[5]]
[1] 0.3616587

[[6]]
[1] 0.3316719

[[7]]
[1] 0.2598854

[[8]]
[1] 0.2117248

[[9]]
[1] 0.2162683

[[10]]
[1] 0.1635642

[[11]]
[1] 1.029546

[[12]]
[1] 0.1035461

[[13]]
[1] 4.158191

[[14]]
[1] 1.468719

[[15]]
[1] 0.2283603

[[16]]
[1] 0.1571119

[[17]]
[1] 0.1023054

[[18]]
[1] 0.2795895

[[19]]
[1] 0.2531787

[[20]]
[1] 0.7232425

[[21]]
[1] 1.037617

[[22]]
[1] 0.562421

[[23]]
[1] 0.1235691

[[24]]
[1] 0.3389063

2 个答案:

答案 0 :(得分:0)

我在黑暗中射击。我的猜测就是这个。请记住,在函数中将返回最后一个对象。如果您愿意,也可以使用命令return指定它。在您的第一个代码中,您循环遍历x但不存储结果并告诉函数输出任何内容。

在第二个代码中,您将结果存储在一个列表中并将其返回,但我并不确切知道您要查找的输出类型。

callduration2 <- function(x) { res <- matrix(nrow=length(x)) for (i in x) { res[i] <- timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)$s.end - timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)$s.start } return(res) }

myresults <- callduration2(x)

为避免编写循环,您可以执行以下操作。

sapply(x,function(i) timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)$s.end - timer(i, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)$s.start)

答案 1 :(得分:0)

也许你可以这样写: duration是一个测量持续时间的函数,callduration返回的是持续时间的向量,名称与callduration的参数相同。

duration <- function(x) {
    t <- timer(x, threshold = 2, msmooth = c(400,90), dmin = 0.1, plot = FALSE)
    t$s.end - t$s.start
}

callduration <- function(xs) {
    durations <- sapply(xs, duration)
    names(durations) <- names(xs)
    durations
}