以下代码的目的是使用单独的向量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;
答案 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"