假设我在R中有一个数组:10 7 4 3 8 2在排序时,这将是:2 3 4 7 8 10
R中从原始数组返回已排序数组元素的索引的最佳方法是什么.我正在寻找一个输出: 6(索引2),4(索引3),3(索引4),2(索引7),5(索引8),1(索引10)
我用dagre绘制有向图,但我试图理解svg,d3,dagre和graphlib是如何相互依赖的?基本上,一个人停下来,另一个人开始.
我会尝试用我有限的理解指出我能收集到的东西.
svg :(是一种基于XML的矢量图像格式,但基本上是它)是一个html标签,使用它可以绘制圆形,椭圆形,矩形等,然后使用g元素分组两个或多个形状并应用变换等.
d3:d3是一个javascript库,它基本上允许你将数据与svg结合起来.因此,不是每次都编写svg标记,而是基本上使用编程,循环,数据等并创建svg代码.
现在来到dagre,dagre-d3和graphlib是我有一个问题,假设我上面所说的任何事情都有意义:)
dagre,dagre-d3:这是dagre页面所说的" Dagre是一个JavaScript库,可以很容易地在客户端布置有向图.dagre-d3库作为dagre的前端,提供实际渲染使用D3. "
有人可以向我解释一下吗?那么我可以在dagre,dagre-d3中使用d3函数吗?嗯......我已经很困惑了,你能用一个例子来解释这些是如何共存的吗?这个代码片段让我思考:
var oldDrawNodes = renderer.drawNodes();
renderer.drawNodes(function(graph, root) {
var svgNodes = oldDrawNodes(graph, root);
svgNodes.each(function(u) {
d3.select(this).classed(graph.node(u).nodeclass, true);
});
return svgNodes;
});
Run Code Online (Sandbox Code Playgroud)
这里,drawNodes是dagre-d3的一个函数,但是它被覆盖了,我们在它里面传递了一个d3函数(d3.select(this).classed).嗯......这是怎么回事?我认为d3.select只能用于html元素吗?这是什么'这个'?
graphlib:这是graphlib页面,它表示它为多图形提供数据结构.但我的意思是,这些库是为d3还是为dagre-d3构建的?
我知道我听起来很困惑,但你明白了!如果有人可以向我解释一下如何将这些相关以及哪些功能可以在哪些内部使用,我将能够接受.
谢谢.
我有一个关于在R中找到最长公共子字符串的问题.在StackOverflow上搜索几个帖子时,我了解了qualV包.但是,我看到这个包中的LCS函数实际上找到了string1中存在的所有字符,即使它们不是连续的.
为了解释,如果字符串字符串1:" HEL LO"字符串2:" HEL 12345lo"我希望可以将输出为HEL,但是我得到的输出为hello.我一定做错了什么.请参阅下面的代码.
library(qualV)
a= "hello"
b="hel123l5678o"
sapply(seq_along(a), function(i)
paste(LCS(substring(a[i], seq(1, nchar(a[i])), seq(1, nchar(a[i]))),
substring(b[i], seq(1, nchar(b[i])), seq(1, nchar(b[i]))))$LCS,
collapse = ""))
Run Code Online (Sandbox Code Playgroud)
我也尝试了Rlibstree方法,但我仍然得到不连续的子串.此外,子串的长度也与我的预期不同.请参阅下文.
> a = "hello"
> b = "h1e2l3l4o5"
> ll <- list(a,b)
> lapply(data.frame(do.call(rbind, ll), stringsAsFactors=FALSE), function(x) getLongestCommonSubstring(x))
$do.call.rbind..ll.
[1] "h" "e" "l" "o"
> nchar(lapply(data.frame(do.call(rbind, ll), stringsAsFactors=FALSE), function(x) getLongestCommonSubstring(x)))
do.call.rbind..ll.
21
Run Code Online (Sandbox Code Playgroud) 我知道c用于组合元素.但1:10和c(1:10)之间有什么区别?我看到输出是一样的.不应该c(1:10)给出错误,因为1:10已经结合了所有元素?
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
> c(1:10)
[1] 1 2 3 4 5 6 7 8 9 10
> class(1:10)
[1] "integer"
> class(c(1:10))
[1] "integer"
Run Code Online (Sandbox Code Playgroud) 我有一个csv文件,其内容我正在尝试读入R.但是我的列名称没有正确显示,它在第一列的名称中显示了一些奇怪的字符.(请注意,任何情况都是如此)我尝试阅读的csv文件)
请参阅下面的R代码
> mycsvfile = read.csv('C:\\Users\\wdsuser\\Desktop\\mycsvfile.csv')
> mycsvfile
ï..col1 col2
1 hello world
2 first last
3 bye bye
> names(mycsvfile)
[1] "ï..col1" "col2"
> mycsvfile$col2
[1] world last bye
Levels: bye last world
> mycsvfile$col1
NULL
Run Code Online (Sandbox Code Playgroud)
这就是我的文本文件的外观
col1,col2
hello,world
first,last
bye,bye
Run Code Online (Sandbox Code Playgroud)
R版:
> R.version
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 1.2
year 2014
month 10
day 31
svn rev 66913
language R
version.string R version 3.1.2 (2014-10-31)
nickname Pumpkin Helmet
Run Code Online (Sandbox Code Playgroud) 我观察到,仅对于 rpart 包(对于决策树模型),当我增加数据中的因子级别数量时,该包的速度会急剧减慢。我与其他软件包进行了比较,只有rpart,似乎是这样。下面是对我的数据尝试各种算法的图表。X 轴显示使用的因子级别数,Y 轴显示时间(以秒为单位)。正如您所看到的,对于 rpart,因子数量增加的峰值是巨大的。
通过在线阅读一些资料以及堆栈溢出中的页面,我了解到这与 rpart:::rpart.matrix 中的 for 循环有关,并使用 [ls]apply 更改它会加快该部分代码的速度。
这是原始代码
function (frame)
{
if (!inherits(frame, "data.frame") || is.null(attr(frame,
"terms")))
return(as.matrix(frame))
for (i in 1:ncol(frame)) {
if (is.character(frame[[i]]))
frame[[i]] <- as.numeric(factor(frame[[i]]))
else if (!is.numeric(frame[[i]]))
frame[[i]] <- as.numeric(frame[[i]])
}
X <- model.matrix(attr(frame, "terms"), frame)[, -1L, drop = FALSE]
colnames(X) <- sub("^`(.*)`", "\\1", colnames(X))
class(X) <- c("rpart.matrix", class(X))
X
}
Run Code Online (Sandbox Code Playgroud)
这是为了加速循环而建议的更改
# exactly the same as rpart.matrix, but with for replaced by lapply
f <- function(frame)
{
if (!inherits(frame, …
Run Code Online (Sandbox Code Playgroud) 我想创建一个包含 100 列的数据框,其名称为 feature1、feature2、feature3 ... feature100。
我能够将数据框创建为
df <- as.data.frame(matrix(0, ncol = 100, nrow = 2))
Run Code Online (Sandbox Code Playgroud)
但是我的列名都是 V1、V2 等
> names(df)
[1] "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9" "V10" "V11" "V12" "V13" "V14" "V15"
[16] "V16" "V17" "V18" "V19" "V20" "V21" "V22" "V23" "V24" "V25" "V26" "V27" "V28" "V29" "V30"
[31] "V31" "V32" "V33" "V34" "V35" "V36" "V37" "V38" "V39" "V40" "V41" "V42" "V43" "V44" "V45"
[46] "V46" "V47" "V48" "V49" "V50" "V51" "V52" "V53" "V54" "V55" …
Run Code Online (Sandbox Code Playgroud) 说,我在表中有100列.我不知道特定值可能存在于哪些列中.所以,我想检查所有列,如果它存在于任何100列中,我想选择它.
我搜索了一下,在大多数地方,解决方案似乎如下所示
select *
from tablename
where col1='myval'
or col2='myval'
or col3='myval'
or .. or col100='myval'
Run Code Online (Sandbox Code Playgroud)
我也读了一些论坛,据说这是一个不好的数据库设计案例,我同意,但我正在研究数据库中已有的表.
有更聪明的方法吗?
我正在阅读尾递归和传统递归之间的区别,并发现它提到"Tail Recursion然而是一种不使用任何堆栈空间的递归形式,因此是一种安全使用递归的方法."
我很难理解如何.
使用Traditional和tail递归比较数字的发现阶乘
传统的递归
/* traditional recursion */
fun(5);
int fun(int n)
{
if(n == 0)
return 1;
return n * fun(n-1);
}
Run Code Online (Sandbox Code Playgroud)
这里,调用堆栈看起来像
5 * fact(4)
|
4 * fact(3)
|
3 * fact(2)
|
2 * fact(1)
|
1 * fact(0)
|
1
Run Code Online (Sandbox Code Playgroud)
尾递归
/* tail recursion */
fun(5,1)
int fun(int n, int sofar)
{
int ret = 0;
if(n == 0)
return sofar;
ret = fun(n-1,sofar*n);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
然而,即使在这里,变量'sofar'将在不同点保持 - 5,20,60,120,120.但是一旦从递归调用#4的基本情况调用return,它仍然必须返回120到递归调用#3,然后返回到#2,#1并返回到main.所以,我的意思是说使用堆栈并且每次返回上一次调用时,都可以看到该时间点的变量,这意味着它在每一步都被保存.
除非,尾递归写得如下,我无法理解它是如何节省堆栈空间的.
/* tail recursion …
Run Code Online (Sandbox Code Playgroud) 我试图在数据框中找到包含某个字符串的索引.但我希望我的字符串不区分大小写.说,我想在名为COLUMN73的数据框中搜索列号,我希望它返回73,因为它是第七十三列.我有,
which(names(mydata) == "COLUMN73")
Run Code Online (Sandbox Code Playgroud)
是否有可能使我的搜索字符串不敏感,以便即使我搜索说CoLumN73也能得到73?
谢谢.
有没有一个函数可以用来计算R中数组中的1的数量?我一直在寻找可以节省开销的东西
count = 0;
myarray = c(1,1,0,1,0)
for(i in 1:length(myarray))
{
if(myarray[i] == 1)
{
count = count+1
}
}
Run Code Online (Sandbox Code Playgroud) 我在 Microsoft SQL Server 中有一个数据库,其中表名称类似于firstpart.secondpart。例如,Accounts.BankTransactionBASE 或 CustomerService.SurveyCommentBASE。我不认为整个名称就是表的名称,因为当我使用 sys.tables 在数据库中查找表的名称时,它只给出名称的第二部分,即 SurveyCommentBASE。请看下图。
我有两个问题
我在read.csv中使用skip选项跳过几行,然后从csv文件读入我的数据帧.但是,当我在执行此操作时执行名称(数据帧)时,我会丢失列名并将一些随机字符串作为列名称.为什么会这样?
> mydf = read.csv("mycsvfile.csv",skip=100)
> names(mydf)
[1] "X2297256" "X3"
Run Code Online (Sandbox Code Playgroud)
没有跳过选项,它工作正常
> mydf = read.csv("mycsvfile.csv")
> names(mydf)
[1] "col1" "col2"
Run Code Online (Sandbox Code Playgroud)