在下面,我试图获取系统函数的输出来创建每个虚拟主机的连接数的条形图,但是,我不确定如何将此输出转换为向量使用的向量条形图:
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应该如何工作是错误的?
答案 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
的转换步骤至关重要,因为输出属于类字符