所以我的目标是用值填充数据框的最后一列。数据帧为[343,8]。我为此写了一个解决方案,但是它不起作用,我很好奇为什么我的想法行不通:
result = vector(length = 3)
for(i in 1:343){
for(j in 1:3){
result[j] = combos[i:j]
}
combos$prize[i] = score(result)
}
较大数据框的名称为“ combos”,数据框的最后一列为“ prize”。
我的尝试是创建一个空的向量“结果”,用“ combos”的前三列中的值填充它,然后将我创建的一个名为“得分”的函数应用于“结果”向量,然后最后,使用从“得分”获得的值填写“组合”数据框中的特定条目。
我的版本不起作用,但是教科书中有一种解决方案可以解决该问题:
for (i in 1:nrow(combos)) {
symbols <- c(combos[i, 1], combos[i, 2], combos[i, 3])
combos$prize[i] <- score(symbols)
}
现在,我发现作者所做的与自己之间没有太大区别。是的,他没有使用第二个FOR循环,但是达到最终结果的过程似乎是一致的。
话虽如此,我没做对的是什么?
编辑,这是我在for循环中调用的得分函数的副本:
score = function(symbols) {
# identify case
same = symbols[1] == symbols[2] & symbols[2] == symbols[3]
bars = symbols %in% c("B","BB","BBB")
# get prize
if (same) {
payouts = c("DD" = 100, "7" = 80, "BBB" = 40, "BB" = 25, "B" = 10, "C" = 10,
"0" = 0)
prize = unname(payouts[symbols[1]])
} else if (all(bars)){
prize = 5
} else {
cherries = sum("C" == symbols)
prize = c(0,2,5)[cherries + 1]
}
# adjust for diamonds
diamonds = sum("DD" == symbols)
prize * 2 ^(diamonds)
}
答案 0 :(得分:1)
请注意,var client = new HttpClient();
var pairs = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Email", Application.Current.Properties["Email"].ToString()),
new KeyValuePair<string, string>("Password", ((byte[])Application.Current.Properties["PublicPassword"]).ByteArrayToHexString())
};
var content = new FormUrlEncodedContent(pairs);
var response = await client.PostAsync("https://www.mydomain.tld/", content);
if (response.IsSuccessStatusCode)
{
var browser = new WebView();
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = await response.Content.ReadAsStringAsync();
browser.Source = htmlSource;
this.Content = browser;
await Task.Delay(30000);
}
中的i:j
将向量从i返回到j。例如,尝试运行combos[i:j]
。因此,您正在使用5:7
做一些“怪异”的子集。您可能希望它是combos[i:j]
,它返回组合的第(i,j)个条目。
combos[i, j]
返回combos[i:j]
的第i至第j个条目(我认为这是一个数字矩阵)。在R中,矩阵以列优先顺序存储,因此您的初始子集将返回相应的条目,并且可能“跨越列”。请看以下内容来说明:
combos
所以
x <- matrix(1:6, 2, 3)
print(x)
# [,1] [,2] [,3]
#[1,] 1 3 5
#[2,] 2 4 6
print(x[2:3])
#[1] 2 3
print(x[2,3])
#[1] 6
工作吗?
答案 1 :(得分:1)
因此,问题在于如何创建符号“向量”。因为在R中data.frame实际上被认为是“列表”的一种类型,所以您要做的就是为符号变量分配一个3元素的列表。因此,您需要先取消列出该列表,然后才能进行比较。
for (i in 1:nrow(combos)) {
symbols <- unlist(c(combos[i, 1], combos[i, 2], combos[i, 3]))
combos$prize[i] <- score(symbols)
}
这应该可以解决您的问题,尽管如果没有combos data.frame我无法完全测试,但是我认为这只是您的问题,只需查看代码和收到的错误消息即可。祝你好运!