将系统输出转换为矢量

时间:2013-04-27 21:46:06

标签: r

在下面,我试图获取系统函数的输出来创建每个虚拟主机的连接数的条形图,但是,我不确定如何将此输出转换为向量使用的向量条形图:

visitors <- system("sudo awk '{print $1};' /var/log/apache2/other_vhosts_access.log | sort | uniq -c | sort -rn | head | awk '{print $1}'")

hosts <- system("sudo awk '{print $1};' /var/log/apache2/other_vhosts_access.log | sort | uniq | sort -rn | head")

barplot(hosts, visitors)

访问者的输出是一组数字值,而主机应该是(并输出为)文本字符串。

我意识到上面出现的主机和访客不会起作用(假设他们在我的基本理解中不是向量),但这或多或少是我最终试图将输出与各自的轴相关联的方式,如果可能的话。

输出显示为预期(即,访问者的数值和hosts_的一组字符串,但我不确定如何将这些值转换为可绘制的向量。是否有一种循环方法系统输出的字符串?我想如果在系统内循环,它仍然会被读作单个值,因此,不是可绘图的(据我所知)。我是R的新手,所以也许我的了解barplot应该如何工作是错误的?

1 个答案:

答案 0 :(得分:5)

使用intern = TRUE,在我的设置中,例如我有

head(system("ls", intern = TRUE))
[1] "Articles"    "Books"       "coucou.tex~" "Cpp"        
[5] "Desktop"     "Devel"  

为了完成我的回答,我将添加一个带有实数的例子

write.table(cbind(1:10, 3:12), file = "file.txt", row.names = FALSE)
vect <- system("awk '{print $1};' file.txt | tail -10", intern = TRUE)
vect <- as.numeric(vect)
plot(vect)

使用as.numeric的转换步骤至关重要,因为输出属于类字符