如何在函数中填充向量?

时间:2017-11-06 07:55:34

标签: r

以下代码的目的是使用单独的向量textVector中包含的系统命令的结果填充向量tv

tv = c("ls" , "ls -l")
textVector = c()

mf <- function(f) {
  cmdToRun <- f
  aa <- system(cmdToRun , intern=TRUE)
  textVector <- c(textVector, aa)
}

lapply(tv , mf)

此代码的行为不符合预期,因为textVector只包含NULL

如何使用系统命令的结果填充textVector

使用:

tv = c("ls" , "ls -l")
textVector = c()

mf <- function(f) {
  cmdToRun <- f
  aa <- system(cmdToRun , intern=TRUE)

  textVector <<- c(textVector, aa)

}

lapply(tv , mf)

结果textVector只包含第一个命令的结果,在这种情况下&#34; ls&#34;而不是&#34; ls -l&#34;

2 个答案:

答案 0 :(得分:2)

您必须将lapply调用的结果保存到新变量中......在您的情况下,它将生成包含两个字符向量的列表

result<-lapply(tv , mf)

此外,取决于您的操作系统system是否有效... r文档建议system2您可能也会幸运shell

答案 1 :(得分:1)

如果要在函数中更改父环境中的对象,则需要使用<<-而不是<-

tv = c("ls" , "ls -l")
textVector = c()

mf <- function(f) {
  cmdToRun <- f
  aa <- system(cmdToRun , intern=TRUE)

  textVector <<- c(textVector, aa)

}

lapply(tv , mf)

结果:目录包含两个文件“file1”和“file2”

textVector
#[1] "file1"
#[2] "file2"
#[3] "total 8"
#[4] "-rw-r--r-- 1 [deleted] 3 Nov  6 18:24 file1"
#[5] "-rw-r--r-- 1 [deleted] 5 Nov  6 18:24 file2"