我想使用下面的计算参数化dplyr,找出哪些值Sepal.Length与多个值相关联Sepal.Width:
library(dplyr)
iris %>%
group_by(Sepal.Length) %>%
summarise(n.uniq=n_distinct(Sepal.Width)) %>%
filter(n.uniq > 1)
Run Code Online (Sandbox Code Playgroud)
通常我会写这样的东西:
not.uniq.per.group <- function(data, group.var, uniq.var) {
iris %>%
group_by(group.var) %>%
summarise(n.uniq=n_distinct(uniq.var)) %>%
filter(n.uniq > 1)
}
Run Code Online (Sandbox Code Playgroud)
但是,这种方法会因为dplyr使用非标准评估而引发错误.应该如何编写这个函数?
我希望这gettimeofday()会调用系统调用来完成实际工作的时间.但是,运行以下程序
#include <stdlib.h>
#include <sys/time.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{
struct timeval tv;
printf("Before gettimeofday() %ld!\n", tv.tv_sec);
int rc = gettimeofday(&tv, NULL);
printf("After gettimeofday() %ld\n", tv.tv_sec);
if (rc == -1) {
printf("Error: gettimeofday() failed\n");
exit(1);
}
printf("Exiting ! %ld\n", tv.tv_sec);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
under dtruss -d返回一长串系统调用,最后一个是:
RELATIVE SYSCALL(args) = return
... lots of syscalls with earlier timestamps ...
3866 fstat64(0x1, 0x7FFF56ABC8D8, 0x11) = 0 0
3868 ioctl(0x1, 0x4004667A, 0x7FFF56ABC91C) = 0 0
3882 …Run Code Online (Sandbox Code Playgroud) 收到来自内容脚本的消息后,我想创建一个新选项卡并填充它动态打开的页面(现在我只是试图将新创建的页面变为红色).
eventPage.js:
// ... code that injects another content script, works fine
// Problem code...
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse)
{
chrome.tabs.create({url: chrome.extension.getURL("blankpage.html")},
turnTabRed);
});
function turnTabRed(tab)
{
chrome.tabs.executeScript(
tab.id,
{code: 'document.body.style.backgroundColor="red"'}
);
}
Run Code Online (Sandbox Code Playgroud)
这成功创建了一个新的选项卡和加载blankpage.html(这只是一个带有一些文本的HTML页面)很好,但无法将背景颜色绘制为红色.console.log()在各个地方插入语句并在调试器中搞错之后,我确定turnTabRed正在调用,tab.id确实是新创建的选项卡的ID,如果我document.body.style.backgroundColor="red"从控制台调用,则新选项卡的背景变为红色.我注意到,如果我加入
(*)
chrome.tabs.query(
{}, function (tabArr) { for (var i = 0; tabArr[i]; i++)
console.log(tabArr[i].title); });
Run Code Online (Sandbox Code Playgroud)
进入turnTabRed新标签标题的主体不会被打印到控制台,这表明脚本被过早注入,所以我尝试延迟注入,setTimeout当失败时,我试着听取状态完成事件:
function turnTabRed(tab)
{
chrome.tabs.onUpdated.addListener(
function(tabUpdatedId, changeInfo, tabUpdated)
{
if (tabUpdatedId == tab.id && changeInfo.status &&
changeInfo.status …Run Code Online (Sandbox Code Playgroud) 在C中,对于调用的结果进行类型转换被认为是不好的形式malloc.但是,似乎malloc在C++ 中调用的结果应该是类型转换,即使两者都有malloc并且new返回类型void*和调用new都不是类型转换.有没有理由在C++中返回的void指针new被自动提升而返回的void指针malloc不是?