sgu*_*ars 1 for-loop r data.table
我正在尝试遍历一个列表,该列表用于对 data.table 进行子集化,并通过几行代码运行结果。在没有 for 循环的情况下,使用变量进行子集可以正常工作,但是当包含循环时,它无法按预期工作。我猜问题是由数据类型或范围引起的。
以下代码完美运行:
dt <- data.table(mpg)
list <- levels(dt$manufacturer)
dt[manufacturer==list[3]]
Run Code Online (Sandbox Code Playgroud)
如果我然后尝试使用 for 循环遍历列表:[更新代码 - 已解决]
for (var in list) {
subs <- data.table(melt(dt[manufacturer==var, list(model, hwy, cty)], id.vars='model'))
png(paste(var, 'png', sep='.'))
print(ggplot(subs, aes(model, value, col=variable)) + geom_point())
dev.off()
}
Run Code Online (Sandbox Code Playgroud)
我什么也得不到。
对我来说,代码部分看起来相同,应该同样工作。有没有人有什么建议可能导致我在第二次过滤中没有得到任何东西?任何帮助表示赞赏。
这是一个很常见的问题。检查差异:
for (i in 1:5) {i}
# no output
for (i in 1:5) {print(i)}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
Run Code Online (Sandbox Code Playgroud)
但是,代码是这样执行的:
for (i in 1:5) {j <- i^2}
j
[1] 25
Run Code Online (Sandbox Code Playgroud)
如果您在循环中运行某些代码,只需使用全局变量来存储结果。
更新:
在此讨论之后:
在一个循环中,自动打印被关闭,因为它是在一个函数内。如果要查看输出,则需要在两种情况下显式打印某些内容。
没有打印只是一种约定,它可以防止您的控制台偶尔收到垃圾邮件。
| 归档时间: |
|
| 查看次数: |
7700 次 |
| 最近记录: |