我来自PHP背景,仍然试图了解R。
例如,我可以轻松地在PHP中循环数组并操纵数据,
$array = [
"site1" => 9
"site2" => 10
"site3" => 18
"site4" => 28
]
foreach($array as $index => $id) {
echo $id . '<br/>';
}
结果,
9
10
18
28
但在R中,我有这个数据框,例如,
siteKey siteCode
1 site1 9
2 site2 10
3 site3 18
4 site4 28
环,
for(i in 1:length(sites.df$siteKey)) {
print(sites.df$siteCode)
}
结果,
[1] "9" "10" "18" "28"
[1] "9" "10" "18" "28"
[1] "9" "10" "18" "28"
[1] "9" "10" "18" "28"
我认为应该是这个结果?
"9"
"10"
"18"
"28"
知道如何使用R循环获得我需要的结果吗?
修改
查询,
# Prepare SQL query1.
dataQuery <- "SELECT
*
FROM speckdata AS s
LEFT JOIN weatherunderground AS w
ON s.wid_timestamp = w.wid_timestamp
LEFT JOIN nodes AS n
ON n.nid = s.nid
AND n.datatype = 'speck'
WHERE n.nid = 'SITE'
"
也许最好循环下面这个?
#
# Data: site 1
#
# Match the pattern and replace it.
data1Query <- sub("SITE", as.character(site1), data1Query)
# Store the result in data1.
data1 = dbGetQuery(DB, data1Query)
#
# Data: site 2
#
data2Query <- sub("SITE", as.character(site2), data2Query)
# Store the result in data.
data2 = dbGetQuery(DB, data2Query)
#
# Data: site 3
#
data3Query <- sub("SITE", as.character(site3), data3Query)
# Store the result in data.
data3 = dbGetQuery(DB, data3Query)
#
# Data: site 4
#
data4Query <- sub("SITE", as.character(site4), data4Query)
# Store the result in data.
data4 = dbGetQuery(DB, data4Query)
然后合并所有数据,
# Merge data sets.
set.seed(1)
dataList = list(data1, data2, data3, data4)
allData = Reduce(function(...) merge(..., all=T), dataList)
然后绘制数据,
timePlot(
allData,
pollutant = c(species, condition),
avg.time = mean,
lwd = 2,
lty = 1,
type = "site",
group = TRUE,
auto.text = FALSE
)
答案 0 :(得分:2)
在循环中添加对[i]的调用,就像这样......
node: symbol lookup error:
/root/nodemodule/example/build/Release/kaku.node:
undefined symbol: _ZN8RCSwitchC1Ev
这样,每次迭代都会在location [i]打印单个实例。
希望这是有道理的。
答案 1 :(得分:1)
@dsifford的解决方案在基础R中是正常的。但是,我建议在从PHP转换的早期看一下dplyr
包,因为它使事情比无望的混乱更加透明{ {1}}函数(向所有激进的基础R-ers道歉)。
xapply
这本身并不容易,但如果你有额外的操作,它会让你的骑行更顺畅。
答案 2 :(得分:1)
你写的问题是“R循环:如何正确使用它?”
您建议使用此代码
for(i in 1:length(sites.df$siteKey)) {
print(sites.df$siteCode)
}
此代码将是正确使用R循环的示例(如果您坚持使用它,即使不鼓励它)。
此代码所说的是每次传递打印出$ siteCode的“列”或完整值列表。循环重复每个站点的打印请求,因此每个过程都会得到相同的完整列表。
如上所述@dsifford将其更改为
for(i in 1:length(sites.df$siteKey)) {
print(sites.df$siteCode[i])
}
意味着它不会打印整个列表,而是会为每次传递打印该列表中的第i个 th 值。
您添加的新代码有不同的问题,特别是您为每个网站反复重复相同的代码。您可能需要考虑编写函数来替换重复的代码,然后将函数提供给您正在使用的站点列表。这是循环可能有意义的情况(尽管可能没有)。但这是你原来问题的一个副问题。